用 pair
就能A,用自定义的结构体就会WA /kk
这是结构体的
struct node {
int dist, id;
node() {}
node(int _, int __) : dist(_), id(__) {}
inline bool operator<(const node &x) const {
return dist == x.dist ? id < x.id : dist < x.dist;
}
};
inline void Dijkstra(int s) {
priority_queue<node> q;
memset(vis, 0, sizeof(vis));
memset(dis, 0x3f, sizeof(dis));
dis[s] = 0;
q.push(node(0, s));
while (!q.empty()) {
int u = q.top().id;
q.pop();
if (vis[u]) continue;
vis[u] = true;
for (ri i = head[u]; i; i = e[i].nxt) {
int v = e[i].to, w = e[i].w;
if (dis[v] >= dis[u] + w) {
dis[v] = dis[u] + w;
pre[v] = i;
q.push(node(dis[v], v));
}
}
}
}
这是 pair
的
#define P pair<int, int>
#define mp make_pair
inline void Dijkstra(int s) {
priority_queue<P, vector<P>, greater<P> > q;
memset(vis, 0, sizeof(vis));
memset(dis, 0x3f, sizeof(dis));
dis[s] = 0;
q.push(mp(0, s));
while (!q.empty()) {
int u = q.top().second;
q.pop();
if (vis[u]) continue;
vis[u] = true;
for (ri i = head[u]; i; i = e[i].nxt) {
int v = e[i].to, w = e[i].w;
if (dis[v] >= dis[u] + w) {
dis[v] = dis[u] + w;
pre[v] = i;
q.push(mp(dis[v], v));
}
}
}
}