喔...找到错误了,unionSet里u = find(u),v = find(v)
```cpp
#include <iostream>
#include <cstdio>
using namespace std;
int xi,yi;
int fa[5007];
int n,m,p;
int find(int x){
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int unionSet(int u,int v){
u = find(u),v = find(v);
if(u != v){
fa[u] = v;
}
}
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
scanf("%d%d",&xi,&yi);
unionSet(xi,yi);
}
int u,v;
for(int i=1;i<=p;i++){
scanf("%d%d",&u,&v);
if(find(u) == find(v)) printf("Yes\n");
else printf("No\n");
}
return 0;
}
```
by Ivanhunt @ 2017-10-30 23:15:48