70分求调
查看原帖
70分求调
969221
Fryderyk_Chopin楼主2024/7/15 16:53
#include<bits/stdc++.h>

using namespace std;

int T,n,m;
int dis[10010],q[10010];
bool vis[10010];
struct Graph{
    int to,w;
};
vector<Graph>Edge[10010];

bool SPFA(){
    queue<int>s;
    s.push(1);
    dis[1]=0;
    q[1]++;
    while(!s.empty()){
        int x=s.front();s.pop();
        vis[x]=0;
        for(int i=0;i<Edge[x].size();i++){
            if(dis[x]+Edge[x][i].w<dis[Edge[x][i].to]){
                dis[Edge[x][i].to]=dis[x]+Edge[x][i].w;
                if(!vis[Edge[x][i].to]){
                    vis[Edge[x][i].to]=1;
                    s.push(Edge[x][i].to);
                    if(++q[Edge[x][i].to]>=n) return false;
                }
            }
        }
    }
    return true;
}

int main(){
    cin>>T;
    while(T--){
    	for(int i=1;i<=n;i++){
    		dis[i]=INT_MAX;
    		vis[i]=0;q[i]=0;
    		Edge[i-1].clear();
		}
        cin>>n>>m;
        int flag=1;
        for(int i=1,u,v,w;i<=m;i++){
            cin>>u>>v>>w;
            Edge[u].push_back((Graph){v,w});
            if(w>=0) Edge[v].push_back((Graph){u,w});
        }
        flag=SPFA();
        if(flag==1) cout<<"NO\n";
        else cout<<"YES\n";
    }
    return 0;
}

My Record

2024/7/15 16:53
加载中...