RT,既然
注:实际上 n≤106。
那这一份代码为什么会只有50啊。
(就是对每一个读进来的i,j 都膜一下 106+1)
#include<bits/stdc++.h>
using namespace std;
const int si=1e6+10;
const int mod=1e6+1;
int T;
int n;
int pa[si];
int size_[si];
struct node{
int x,y;
int e;
bool operator < (const node &x)const{
return e>x.e;
}
}a[si];
int root(int x){
if(pa[x]!=x){
return pa[x]=root(pa[x]);
}
return pa[x];
}
void Union(int x,int y){
int rx=root(x);
int ry=root(y);
if(rx==ry){
return;
}
if(size_[rx]>size_[ry]){
pa[ry]=rx;
size_[rx]+=size_[ry];
}
else{
pa[rx]=ry;
size_[ry]+=size_[rx];
}
}
void modread(int &x,int p){
int u;
scanf("%d",&u);
x=u%p;
}
bool prf=true;
void print(int x){
if(x){
return (void)(puts("YES"));
}
return (void)(puts("NO"));
}
int main(){
scanf("%d",&T);
while(T--){
memset(pa,0,sizeof(pa));
memset(size_,0,sizeof(size_));
prf=true;
scanf("%d",&n);
for(register int i=1;i<=n;++i){
modread(a[i].x,mod);
modread(a[i].y,mod);
scanf("%d",&a[i].e);
}
sort(a+1,a+1+n);
for(register int i=1;i<=n;++i){
pa[i]=size_[i]=i;
}
for(register int i=1;i<=n;++i){
if(a[i].e==1){
Union(a[i].x,a[i].y);
}
else{
if(root(a[i].x)==root(a[i].y)){
prf=false;
break;
}
}
}
print(prf);
}
return 0;
}