90pts, WA on #11
下载了第11个数据点,应该输出一个 YES????
大佬帮忙找找错,感激不尽。
#include<bits/stdc++.h>
using namespace std;
#define SF scanf
#define PF printf
struct Edge {
int to, next, w;
}edge[50005];
struct node {
int dis, id;
};
int n, m, cnt, head[5005], num[5005], dis[5005];
bool vis[5005];
void add(int u, int v, int w) {
edge[++cnt].to = v;
edge[cnt].next = head[u];
edge[cnt].w = w;
head[u] = cnt;
}
void SPFA(int x) {
for(int i = 1; i <= n; i++) dis[i] = 0x3f3f3f3f;
dis[x] = 0;
queue<node> q;
q.push((node){0, x}), vis[x] = 1;
while(!q.empty()) {
node tmp = q.front();
q.pop();
vis[tmp.id] = 0;
num[tmp.id]++;
if(num[tmp.id] == n) {
PF("NO");
exit(0);
}
for(int i = head[tmp.id]; i; i = edge[i].next) {
int to = edge[i].to;
if(dis[to] > dis[tmp.id] + edge[i].w) {
dis[to] = dis[tmp.id] + edge[i].w;
if(!vis[to]) {
q.push((node){dis[to], to});
vis[to] = 1;
}
}
}
}
}
int main() {
SF("%d%d", &n, &m);
for(int i = 1; i <= n; i++) add(0, i, 0);
for(int i = 1; i <= m; i++) {
int u, v, w;
SF("%d%d%d", &u, &v, &w);
add(v, u, w);
}
SPFA(0);
for(int i = 1; i <= n; i++) PF("%d ", dis[i]);
return 0;
}