Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=100010;
- int pai[N];
- int sz[N];
- int find(int a){
- return a==pai[a] ? a : pai[a]=find(pai[a]);
- }
- void unite(int a,int b){
- a=find(a);
- b=find(b);
- if(a==b)return;
- if(sz[a]<sz[b])pai[a]=b;
- if(sz[a]>sz[b])pai[b]=a;
- if(sz[a]==sz[b]){
- pai[a]=b;
- sz[a]+=sz[b];}
- }
- int main()
- {
- int n,q;
- scanf("%d %d", &n, &q);
- for (int i=1;i<=n;i++)pai[i]=i;
- for (int i=1;i<=n;i++)sz[i]=1;
- for (int i=1;i<=q;i++){
- int a,b;
- scanf("%d %d", &a, &b);
- int menor=100001,maior=0;
- unite(a,b);
- for (int j=1;j<=n;i++){
- menor=min(menor,sz[find(j)]);
- maior=max(maior,sz[find(j)]);
- }
- int ok=0;
- for (int i=1;i<=n;i++){
- if(find(i)!=find(1))ok=1;
- }
- if(ok){
- int c=maior-menor;
- printf("%d\n", c);}
- else printf("0\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement