大神求助,哪里出了问题?

P1196 [NOI2002] 银河英雄传说

@[liruiduan2](/user/488310) 给你改成了这样: ``` #include<bits/stdc++.h> using namespace std; const int maxn=30001; int fa[maxn],siz[maxn],len[maxn]; pair<int,int> find(int x){ if(fa[x]==x) return {x,0}; pair<int,int>temp=find(fa[x]); siz[x] = siz[fa[x]]; return {fa[x]=temp.first,len[x]=temp.second+len[x]}; } int gardpa(int x){ return find(x).first; } void join(int x,int y){ int fx=gardpa(x),fy=gardpa(y); if (fx != fy){ fa[fx]=fy; len[fx]=len[fy]+siz[fy]; siz[fy]+=siz[fx]; siz[fx]=siz[fy]; } } int search(int x,int y){ if(gardpa(x)==gardpa(y)){ return abs(len[x]-len[y])-1; } return -1; } int main(){ // freopen(".in","r",stdin); // freopen(".out","w",stdout); for(int i=1;i<=30000;i++){ fa[i]=i; siz[i]=1; len[i]=0; } int n; cin>>n; for(int i=1;i<=n;i++){ char opt; cin>>opt; if(opt=='M'){ int x,y; cin>>x>>y; join(x,y); } else{ int x,y; cin>>x>>y; cout<<search(x,y)<<endl; } } return 0; } ```
by 看什么看 @ 2022-04-21 16:05:30


什么题?
by 外太空的肖 @ 2022-04-22 15:22:07


@[看什么看](/user/415838) 谢谢
by wisdua @ 2022-04-22 16:43:24


|