不是,你只是钦定 $u<v$,但是你有可能 $ff(v)$ 是你要的 $10001$,所以这样写是不好的,你应该先把 $u,v$ 取成 $ff(u),ff(v)$ 之后再处理。
by Rosaya @ 2023-06-29 22:01:16
或者你像我这么写,直接判断 $i$ 和 $10001$ 是否在同一个集合中。
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,f[20005],x,y,t;
int ff(int g){
if(f[g]==g)return g;
return f[g]=ff(f[g]);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m>>p>>q;
for(int i=0;i<=20000;i++)f[i]=i;
while(p--){
int u,v;cin>>u>>v;
u+=10000,v+=10000;
if(u>v)swap(u,v);
f[ff(v)]=ff(u);
/*if(u==18303 || v==18303){
cout<<f[10001]<<endl;
system("pause");
}*/
}
while(q--){
int u,v;cin>>u>>v;
u+=10000,v+=10000;
if(u<v)swap(u,v);
f[ff(v)]=ff(u);
//if(ff(9999)!=9999)system("pause");
}
for(int i=0;i<10000;i++){
//cout<<ff(i)<<' ';
if(ff(i)==ff(9999))x++;
}
for(int i=10001;i<=20000;i++){
//cout<<ff(i)<<' ';
if(ff(i)==ff(10001))y++;
}
//cout<<endl;
cout<<min(x,y);
return 0;
}
```
by Rosaya @ 2023-06-29 22:02:23
太感谢了!!!AC了!!!
by fcy20180201 @ 2023-06-29 22:33:32
所以我还有一个问题是计数范围太小了是吗
by fcy20180201 @ 2023-06-29 22:35:52
@[Rosaya](/user/191748)
不愧是大佬!
by zhangxisu @ 2024-04-14 19:19:03