1 条题解
-
0118爱好者 (mengqingyu) LV 10 @ 2024-7-27 9:49:22
#include<bits/stdc++.h> #include<algorithm> using namespace std; typedef unsigned long long ull; typedef long long ll; priority_queue<int> q;//big根堆,数字越大,优先级越高 int f[100005],size[100005],n,m,x,y; int find(int x) { if(f[x]==x) return x; else return f[x]=find(f[x]); } void merge(int x,int y) { int fx=find(x); //x的祖先 int fy=find(y); //y的祖先 if(fx==fy) return ; //本就在一个集合 if(size[fx]<size[fy]) { f[fx]=fy; //将x的祖先设为y size[fy]+=size[fx]; //连通分量小的合并到大 } else { f[fy]=fx; size[fx]+=size[fy]; } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { f[i]=i;//自己是自己的祖先 size[i]=1; } for(int i=1;i<=m;i++) { cin>>x>>y; merge(x,y); q.push(size[find(x)]); cout<<q.top()<<"\n"; } return 0; }
- 1
信息
- ID
- 3152
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 5
- 已通过
- 5
- 上传者