为什么11pts?

P1196 [NOI2002] 银河英雄传说

@[_Ethan123_](/user/517086) ```cpp #include<iostream> using namespace std; int f[100001],dis[100001],s[100001]; int find(int x){ if(f[x]==x) return x; dis[x]+=dis[f[x]]; return f[x]=find(f[x]); } void un(int u,int v){ u=find(u); v=find(v); if(u==v)return; f[u]=v; dis[u]+=s[v]; s[v]+=s[u]; s[u]=0;//这里s[u]应该清零(个人理解) } int main(){ int T; cin>>T; for(int i=1;i<=30000;++i){ f[i]=i; s[i]=1; } char c; int x,y; while(T--){ cin>>c>>x>>y; if(c=='M')un(x,y); else{ int u=find(x),v=find(y); if(u!=v)cout<<-1<<endl; else cout<<abs(dis[x]-dis[y])-1<<endl; } } } ```
by william_zy @ 2022-05-02 22:50:26


|