90pts求调!
查看原帖
90pts求调!
648996
_orange_楼主2024/1/21 09:59
#include<bits/stdc++.h>
using namespace std;
long long n,t,a,b,e;
struct bing{
	int root[1000005];
	int get(int p){
		if(root[p]==p)return p;
		return root[p]=get(root[p]);
	}
	void pus(int a,int b){
		root[get(a)]=get(b);
	}
	bool iss(int a,int b){
		int ra=get(a),rb=get(b);
		if(ra==rb)return true;
		else return false;
	}
}v;

long long r[1000001][2];

int main(){
	scanf("%lld",&t);
	for(int j=1;j<=100001;j++){
	    v.root[j]=j;
	}
	for(int i=0;i<t;i++){
		for(int j=1;j<100001;j++){
			r[j][0]=r[j][1]=0;
		}long long cnt=0,pos=0;
		scanf("%lld",&n);map<long long,long long>mp;
		for(int j=0;j<n;j++){
			scanf("%lld%lld%lld",&a,&b,&e);
			if(mp.find(a)==mp.end()){
				cnt++;
			    mp[a]=cnt;
			}
			if(mp.find(b)==mp.end()){
			    cnt++;
			    mp[b]=cnt;
			}
		    if(e){
			    v.pus(mp[a],mp[b]);
		    }else{pos++;
			    r[pos][0]=mp[a];
			    r[pos][1]=mp[b];
		    }
		}
		bool flag=true;
		for(int i=1;i<=pos;i++){
			if(v.iss(r[i][0],r[i][1])){
				printf("NO\n");flag=false;
				break;
			}
		}
		if(flag)printf("YES\n");
		for(int j=1;j<=100001;j++){
	    	v.root[j]=j;
		}
	}
	return 0;
} 

总是wa on #2

2024/1/21 09:59
加载中...