全部评论 1

  • 代码:

    #include<bits/stdc++.h>
    #define ull unsighed long long
    #define ll long long
    using namespace std;
    const int N = 2e5+10;
    int fa[N],n,siz[N];
    ll sum,cnt;
    vector<int> adj[N];
    bool f;
    map<int,int> mp;
    struct node{
    	int u,v,z;
    }e[N];
    void init(){
    	mp.clear();
    	cin>>n;
    	cnt = 0;
    	f = true; 
    	for(int i = 1;i<=2*n;i++) fa[i] = i,siz[i] = 1;
    }
    int find(int x){
    	if(fa[x]==x) return x;
    	fa[x] = find(fa[x]);
    	return fa[x];
    }
    
    void merge(int u,int v){
    	u = find(u),v = find(v);
    	if(u==v) return;
    //	if(siz[u]<siz[v]){
    //		swap(u,v);
    //	}
    //	siz[u]+=siz[v];
    	fa[v] = fa[u];
    }
    
    bool cmp(node x,node y){
    	return x.z>y.z;
    }
    void solve(){
    	init();
    	for(int i = 1;i<=n;i++){
    		cin>>e[i].u>>e[i].v>>e[i].z;
    		mp[e[i].u] = mp[e[i].v] = 1;
    	}
    	// 离散化 
    	for(auto &i:mp){
    		i.second = ++cnt;
    	}
    	//让1的在前,方便其判断 
    	sort(e+1,e+n+1,cmp);
    	
    	for(int i = 1;i<=n;++i){
    		int u = mp[e[i].u],v = mp[e[i].v];
    		if(e[i].z==1){
    			merge(u,v);
    		}
    		else{
    			if(find(u)==find(v)){
    				f = 0;
    			}
    		}
    	}
    	cout<<(f?"YES":"NO")<<endl;
    }
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0),cout.tie(0);
    	int _t;
    	cin>>_t;
    	while(_t--){
    		solve();
    	}
    	return 0;
    }
    
    

    2025-08-06 来自 浙江

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页