44pts求助

P1196 [NOI2002] 银河英雄传说

你代码呢
by cuichenchang @ 2022-07-27 16:55:28


```cpp //P1196 [NOI2002] 银河英雄传说 #include<bits/stdc++.h> using namespace std; //inline int read() { // int ret=0,f=1; // char c=getchar(); // for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=-f; // for(; c>='0'&&c<='9'; c=getchar()) ret=ret*10+c-'0'; // return ret*f; //} const int maxn=1e5*3+55*6; int dis[maxn]; int Rank[maxn]; int fa[maxn],T; inline void init(int n) { for(int i=1; i<=n; i++) { fa[i]=i; Rank[i]=1; } } int find(int x) { if(x==fa[x]) return x; int ff=find(fa[x]); dis[x]+=dis[fa[x]]; return fa[x]=ff; } //傻*错误,警钟长鸣 //inline void merge(int x,int y) { // int x=find(i),y=find(j); // if(x==y) return; // fa[x]=y;dis[x]+=Rank[y]; // Rank[y]+=Rank[x]; //} inline void merge(int x,int y) { int u=find(x),v=find(y); if(u==v) return; fa[u]=v;dis[u]+=Rank[v]; Rank[v]+=Rank[u]; } int main() { cin>>T; init(3000+10); for(int l=1;l<=T;l++){ char c; int i,j; cin>>c>>i>>j; if(c=='M') { // i=read(),j=read(); merge(i,j); } else { // i=read(),j=read(); int x=find(i),y=find(j); if(x!=y) { printf("-1\n"); } else { printf("%d\n",abs(dis[i]-dis[j])-1); } } } return 0; } ```
by 柠檬布丁吖 @ 2022-07-27 17:05:37


@[cuichenchang](/user/299950)
by 柠檬布丁吖 @ 2022-07-27 17:05:46


@[柠檬布丁吖](/user/370648) 速通: `init(3000+10);` 改 `init(30000+10);`
by UnyieldingTrilobite @ 2022-07-27 18:09:02


@[UnyieldingTrilobite](/user/250637) - # Thanks♪(・ω・)ノ
by 柠檬布丁吖 @ 2022-07-27 18:10:17


|