pacel_dicke @ 2017-10-18 00:51:59
两份代码,用数组的AC,结构体的70,我也没改什么啊,就是把结构体改成数组而已。。。
int n,m,f[10005];
int findroot(int x){
if(f[x]==x) return x;
f[x]=findroot(f[x]);
return f[x];
}
void rewrite(int x,int y){
int r1=findroot(x),r2=findroot(y);
if(r1!=r2) f[r1]=f[r2];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) f[i]=i;
for(int i=0,cmd,x,y;i<m;i++){
scanf("%d %d %d",&cmd,&x,&y);
if(cmd==1){
rewrite(x,y);
}else{
if(findroot(x)==findroot(y)) printf("Y\n");
else printf("N\n");
}
}
return 0;
}
struct node{
int val,f=-1;
}line[10002];
int findroot(node x){
if(x.f==-1) return x.val;
x.f=findroot(line[x.f]);
return x.f;
}
void rewrite(node x,node y){
int root1=findroot(x),root2=findroot(y);
if(root1!=root2) x.f=line[root1].f=root2;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) line[i].val=i;
for(int i=0,cmd,x,y;i<m;i++){
cin>>cmd>>x>>y;
if(cmd==1){
rewrite(line[x],line[y]);
}else{
if(findroot(line[x])==findroot(line[y])) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
return 0;
}
by hjfzzm @ 2017-10-18 07:58:58
结构体是自定义的数据类型,来回调用比内建的数组确实是慢一些。
by 逆尘 @ 2017-10-21 14:57:04
因为struct慢,换class就可以了