有个地方不明白:
#include<bits/stdc++.h>
using namespace std;
int n,m,p,f[5010];
int find(int x){
if(f[x]==x){
return x;
}
f[x]=find(f[x]);
return f[x];
}
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++){
f[i]=i;
}
int x,y;
for(int i=1;i<=m;i++){
cin>>x>>y;
f[find(x)]=f[y];//只有此处不同
}
for(int i=1;i<=p;i++){
cin>>x>>y;
if(find(x)==find(y)){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
}
return 0;
}
只有 20pts ,其他点全 MLE ,然而
#include<bits/stdc++.h>
using namespace std;
int n,m,p,f[5010];
int find(int x){
if(f[x]==x){
return x;
}
f[x]=find(f[x]);
return f[x];
}
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++){
f[i]=i;
}
int x,y;
for(int i=1;i<=m;i++){
cin>>x>>y;
f[find(x)]=f[find(y)];//只有此处不同
}
for(int i=1;i<=p;i++){
cin>>x>>y;
if(find(x)==find(y)){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
}
return 0;
}
就 AC 了 ...
所以说 , 有啥区别呢?