2 条题解
-
0
by hansang:
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int fa[N], ft[N], sum[N]; int findfa(int x){ if(fa[x]==x) return fa[x]; int f=fa[x]; int tx=findfa(fa[x]); ft[x]+=ft[f]; sum[x]=sum[f]; return fa[x]=tx; } int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) fa[i]=i, ft[i]=0, sum[i]=1; for(int i=1; i<=n; i++){ char s[5]; scanf("%s", s); if(s[0]=='M'){ int x, y; scanf("%d%d", &x, &y); int tx=findfa(x), ty=findfa(y); fa[ty]=tx; ft[ty]=sum[tx]; sum[tx]+=sum[ty]; } else{ int x; scanf("%d", &x); int tx=findfa(x); printf("%d\n", sum[x]-ft[x]-1); } } return 0; } -
0
by hansang:
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int fa[N], ft[N], sum[N]; int findfa(int x){ if(fa[x]==x) return fa[x]; int f=fa[x]; int tx=findfa(fa[x]); ft[x]+=ft[f]; sum[x]=sum[f]; return fa[x]=tx; } int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) fa[i]=i, ft[i]=0, sum[i]=1; for(int i=1; i<=n; i++){ char s[5]; scanf("%s", s); if(s[0]=='M'){ int x, y; scanf("%d%d", &x, &y); int tx=findfa(x), ty=findfa(y); fa[ty]=tx; ft[ty]=sum[tx]; sum[tx]+=sum[ty]; } else{ int x; scanf("%d", &x); int tx=findfa(x); printf("%d\n", sum[x]-ft[x]-1); } } return 0; }
- 1
信息
- ID
- 2646
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 10
- 已通过
- 4
- 上传者