堆优化dijkstra,邻接矩阵存图,#1、#3、#4 WA了。
很菜,低级错误轻喷
#include<bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
const int N = 2e5 + 5;
int n,m,s,dis[N],vis[N];
vector<PII> g[N];
void dij() {
priority_queue<PII> q;
memset(dis,0x3f,sizeof dis);
dis[s] = 0;
q.push(make_pair(0,s));
while(q.size()) {
int u = q.top().second;
q.pop();
if(vis[u]) {
continue;
}
vis[u] = 1;
for(auto x:g[u]) {
int v = x.second,l = x.first;
if(dis[v] > dis[u] + l) {
dis[v] = dis[u] + l;
q.push(make_pair(-dis[v],v));
}
}
}
}
int main() {
scanf("%d%d%d",&n,&m,&s);
for(int i = 1;i <= m;i ++) {
int u,v,len;
scanf("%d%d%d",&u,&v,&len);
g[u].push_back({len,v});
g[v].push_back({len,u});
}
dij();
for(int i = 1;i <= n;i ++) {
printf("%d%c",dis[i]," \n"[i == n]);
}
return 0;
}