求调
查看原帖
求调
1263684
Elysialr楼主2024/10/28 15:39
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define SIZE 10001
     
struct road{
    ll ver,cost;
};

ll n,m;
ll dis[SIZE];
ll times[SIZE];
bool vis[SIZE];
vector<road> r[SIZE];

bool spfa(ll root){
    
    queue<ll> q;
    q.push(root);
    dis[root]=0;
    vis[root]=1;
    while(!q.empty()){
        ll x=q.front();q.pop();
        vis[x]=0;
        
        for(ll i=0;i<r[x].size();i++){
            ll y=r[x][i].ver;
            ll z=r[x][i].cost;

            if(dis[y]>dis[x]+z){
                dis[y]=dis[x]+z;

                if(!vis[y]){
                    times[y]++;
                    q.push(y);
                    vis[y]=1;

                    if(times[y]>=n)
                    return 0;
                }
            }
        }
    }
    return 1;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    ll T;cin>>T;
    for(ll t=1;t<=T;t++){
        memset(times,0x3f,sizeof(times));
        memset(vis,0,sizeof(vis));
        memset(dis,0,sizeof(dis));
        r->clear();
        
        cin>>n>>m;
        for(ll i=1;i<=m;i++){
            ll x;road y;
            cin>>x>>y.ver>>y.cost;
            r[x].push_back(y);
            if(y.cost>=0){
                swap(x,y.ver);
                r[x].push_back(y);
            }
        }

        if(spfa(1)) cout<<"NO\n";
        else cout<<"YES\n";
    }
    return 0;
}
2024/10/28 15:39
加载中...