90分求助qwq
查看原帖
90分求助qwq
173056
_Veritas楼主2021/1/26 17:54

#2 TLE

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
inline int read(){
	int x=0;char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x;
}
int T,n,a[1000006],b[1000006],fa[2000006],cnt;bool c[1000006],flag;
map<int,int> m;
inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
inline int merge(int a,int b){return fa[find(a)]=find(b);}
int main(){
	T=read();
	while(T--){
		n=read();cnt=0;for(int i=1;i<=(n<<1);++i) fa[i]=i;flag=false;
		for(int i=1;i<=n;++i)
			m[a[i]=read()]=++cnt,m[b[i]=read()]=++cnt,c[i]=read();
		for(int i=1;i<=n;++i)
			if(c[i])
				merge(m[a[i]],m[b[i]]);
		for(int i=1;i<=n;++i)
			if(!c[i]&&(find(m[a[i]])==find(m[b[i]])))
				{puts("NO");flag=true;break;}
		if(!flag) puts("YES");
	}
	return 0;
}
2021/1/26 17:54
加载中...