补充一份hack数据
查看原帖
补充一份hack数据
218177
WAOT111楼主2020/3/12 20:35

错误代码:

#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

2020/3/12 20:35
加载中...