玄关求调
查看原帖
玄关求调
1313621
shaoyu1489楼主2024/10/30 21:26

WAWA on #12
玄关,求调

#include <iostream>
using namespace std;
typedef long long ll;
const ll inf = 1e9;
ll dis[100000],u[100000],v[100000],w[100000];
int main(){
    ll T,n,m,i,j,flag,tot;
    cin>>T;
    while(T--){
        cin>>n>>m;
        tot = m;
        for(i = 1;i <= m;i++){
        	cin>>u[i]>>v[i]>>w[i];
        	if(w[i] >= 0){//大于等于0就再建一条反向的边 
        		u[++tot] = v[i];
        		v[tot] = u[i];
        		w[tot] = w[i];
			}
		}
		//初始化
        for(i = 1;i <= n;i++) dis[i] = inf;
        dis[1] = 0; 
        m = tot;//tot是边的数量 
        for(j = 1;j <= n - 1;j++){
            for(i = 1;i <= m;i++){
                if(dis[v[i]] > dis[u[i]] + w[i]){
                	dis[v[i]] = dis[u[i]] + w[i];//松弛 
				}
            }
        }
        //判负环 
        flag = 0;
        for(i = 1;i <= m;i++){
            if(dis[v[i]] > dis[u[i]] + w[i]) flag = 1;
        }
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}
2024/10/30 21:26
加载中...