话说应该@哪位管理?
by brimosta @ 2021-08-15 11:16:03
@[StudyingFather](/user/22030)
by brimosta @ 2021-08-15 11:17:42
@[chen_zhe](/user/8457)
by brimosta @ 2021-08-15 11:21:05
Orz,我的代码也是
by Mysterious_Mini @ 2021-08-15 11:21:42
第一页的题解并没有能通过此数据的
by brimosta @ 2021-08-15 11:25:21
@[BFqwq](/user/120074)
by brimosta @ 2021-08-15 11:27:40
@[lihaochen1234567890](/user/247193)
```cpp
#include <bits/stdc++.h>
#define Maxn 500010
#define ll unsigned long long
using namespace std;
ll n,father[Maxn],x,y,rank[Maxn],sum[Maxn];
void makeSet(ll n){
for(int i=1;i<=n;i++)
father[i]=i,sum[i]=1;
}
ll findSet(ll x){
if(father[x]==x)return x;
ll root=findSet(father[x]);
rank[x]+=rank[father[x]];
return father[x]=root;
}
void unionSet(ll x,ll y){
ll r1=findSet(x),r2=findSet(y);
if(r1!=r2)
father[r1]=r2,rank[r1]=sum[r2],sum[r2]+=sum[r1];
return;
}
int main() {
scanf("%llu",&n);
makeSet(n);
for(ll i=1;i<=n;i++){
char c=getchar();
while(c!='M'&&c!='C')
c=getchar();
scanf("%llu %llu",&x,&y);
if(c=='M')
unionSet(x,y);
else if(c=='C'){
ll a=findSet(x),b=findSet(y);
if(a!=b)
printf("-1\n");
else
printf("%llu\n",max(rank[x],rank[y])-min(rank[x],rank[y])-1);
}
}
return 0;
}
```
为什么我的代码输出了 $18446744073709551615$
by pzj666 @ 2021-08-15 11:28:59
@[pzj666](/user/422940) 我怎么知道,我自己怎么错的也没搞明白,为什么两次find不一样qaq
by brimosta @ 2021-08-15 11:33:48
实测,只有
@[Mr_Skirt](/user/36956)
@[p_b_p_b](/user/76481)
@[邱湘雅](/user/150821)
三位巨佬的代码能够通过此数据
by brimosta @ 2021-08-15 11:39:20
为什么又沉了……
by brimosta @ 2021-08-15 11:40:16