错误代码:
#define FRER() freopen("i.txt","r",stdin)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2000+10,mod=1e9+7,inf=0x3f3f3f3f;
int n,m,hd[N],ne,inq[N],vis[N],d[N];
struct E {int v,c,nxt;} e[(int)1e4+10];
void link(int u,int v,int c) {e[ne]= {v,c,hd[u]},hd[u]=ne++;}
queue<int> q;
bool upd(int u,int ad) {
if(d[u]>ad) {
d[u]=ad,vis[u]++;//这里没有判断是否入队计数器就++了
if(vis[u]>n)return 0;
if(!inq[u])q.push(u),inq[u]=1;
}
return 1;
}
int spfa() {
while(q.size())q.pop();
for(int i=1; i<=n; ++i)d[i]=inf,inq[i]=vis[i]=0;
upd(1,0);
while(q.size()) {
int u=q.front();
q.pop(),inq[u]=0;
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v,c=e[i].c;
if(!upd(v,d[u]+c))return 1;
}
}
return 0;
}
int main() {
//FRER();
int T;
for(scanf("%d",&T); T--;) {
memset(hd,-1,sizeof hd),ne=0;
scanf("%d%d",&n,&m);
for(int i=0; i<m; ++i) {
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
link(u,v,c);
if(c>=0)link(v,u,c);
}
puts(spfa()?"YE5":"N0");
}
return 0;
}
hack数据:
1
2 4
1 2 -4
1 2 -3
1 2 -2
1 2 -1
应输出N0,我的这份代码输出的为YE5