求助!!!DEBUG时遇到了一个无法理解的错误!!!

P2078 朋友

不是,你只是钦定 $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


|