救救孩子吧,84分!
查看原帖
救救孩子吧,84分!
528917
ma_niu_bi楼主2022/8/5 14:57
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN=30100*2;
int ver[MAXN],nxt[MAXN],head[MAXN],edge[MAXN],tot,cnt[MAXN],dis[MAXN];
bool inq[MAXN];
inline void add(int x,int y,int z){
    ver[++tot]=y;
    nxt[tot]=head[x];
    edge[tot]=z;
    head[x]=tot;
}
inline void clear(){
    memset(head,0,sizeof(head));
    memset(inq,0,sizeof(inq));
    memset(cnt,0,sizeof(cnt));
    memset(dis,0x7f,sizeof(dis));
    memset(nxt,0,sizeof(nxt));
    memset(ver,0,sizeof(ver));
    memset(edge,0,sizeof(edge));
    tot=0;
}
inline bool spfa(int n,int m){
    queue<int> q;
    q.push(1);
    inq[1]=true;
    cnt[1]=1;
    dis[1]=0;
    while(!q.empty()){
        int now=q.front();
        q.pop();
        inq[now]=false;
        if(cnt[now]>=n)return true;
        for(int i=head[now];i;i=nxt[i]){
            int x=now,y=ver[i],z=edge[i];
            if(dis[y]>dis[x]+z){
                dis[y]=dis[x]+z;
                if(!inq[y]){
                    inq[y]=true;
                    cnt[y]++; 
                    if(cnt[y]>=n)return true;
                    q.push(y);
                }
            }
        }
    }
    return false;
}
inline void slove(){
    int n,m;
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=m;i++){
        int u,v,w;
        scanf("%lld%lld%lld",&u,&v,&w);
        add(u,v,w);
        if(w>=0)add(v,u,w);
    }
    bool state=spfa(n,m);
    if(state)puts("YES");
    else puts("NO");
    clear();
}
signed main(){
    int T;
    scanf("%lld",&T);
    while(T--){
        slove();
    }
    return 0;
}

WA #9 #10

2022/8/5 14:57
加载中...