50 pts 求调
查看原帖
50 pts 求调
658875
Catcats楼主2022/6/11 11:36

rt, WA on #2~#5 , #8

#include<bits/stdc++.h>
using namespace std;
class rul{//条件
	public:
		int a,b,c;
};
int find(int x,map<int,int> fa){//查找
	if(x==fa[x])return x;
	fa[x]=find(fa[x],fa);
	return fa[x];
}
void add(int x1,int x2,map<int,int> fa){//合并
	int f1=find(x1,fa),f2=find(x2,fa);
	if(f1!=f2)fa[f1]=f2;
}
bool cmp(rul a,rul b){//排序
	return a.c>b.c;
}
int main(){
	int t;cin>>t;
	while(t--){
		map<int,int> fa;//并查集主体
		int n,a,b,c;bool can=1;
		cin>>n;
		rul rules[n];
		for(int i=0;i<n;i++){
			cin>>rules[i].a>>rules[i].b>>rules[i].c;
		}
		sort(rules,rules+n,cmp);//1先0后
		for(int i=0;i<n;i++){
			if(rules[i].c==1)add(rules[i].a,rules[i].b,fa);
			else{
				if(find(rules[i].a,fa)==find(rules[i].a,fa))can=0;//矛盾
			}
		}
		puts(can?"YES":"NO");//判断
	}
}
2022/6/11 11:36
加载中...