对于同样的代码,不开O2可以AC,开过后只有#2,#4,#6测试点AC。 提交记录:
(如果提交记录马蜂太挤可以看下面dev帮忙格式化的代码())
#include<bits/stdc++.h>
#define N 5005
using namespace std;
int n,m,dis[N],vistime[N];
bool in[N];
vector< pair<int,int> > G[N];
queue<int> q;
int read() {
int n=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
n=n*10+c-'0',c=getchar();
return n*f;
}
int put(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) put(x/10);
putchar(x%10+'0');
}
bool SPFA() {
for(int i=1; i<=n; i++)
dis[i]=1e9;
q.push(0);
in[0]=1;
vistime[0]=1;
while(!q.empty()) {
int u=q.front();
q.pop();
in[u]=0;
for(auto to:G[u]) {
int v=to.first,w=to.second;
if(dis[v]>dis[u]+w) {
dis[v]=dis[u]+w;
if(!in[v]) {
in[v]=1;
q.push(v);
vistime[v]++;
if(vistime[v]>n)
return 0;
}
}
}
}
return 1;
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1,c,c1,y; i<=m; i++) {
c=read(),c1=read(),y=read();
G[c1].push_back({c,y});
}
for(int i=1; i<=n; i++)
G[0].push_back({i,0});
if(SPFA()) {
for(int i=1; i<=n; i++)
put(dis[i]),putchar(' ');
} else
puts("NO");
return 0;
}