Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=100010;
  4.  
  5. int pai[N];
  6. int sz[N];
  7. int find(int a){
  8. return a==pai[a] ? a : pai[a]=find(pai[a]);
  9. }
  10.  
  11. void unite(int a,int b){
  12. a=find(a);
  13. b=find(b);
  14. if(a==b)return;
  15. if(sz[a]<sz[b])pai[a]=b;
  16. if(sz[a]>sz[b])pai[b]=a;
  17. if(sz[a]==sz[b]){
  18. pai[a]=b;
  19. sz[a]+=sz[b];}
  20. }
  21.  
  22. int main()
  23. {
  24. int n,q;
  25. scanf("%d %d", &n, &q);
  26. for (int i=1;i<=n;i++)pai[i]=i;
  27. for (int i=1;i<=n;i++)sz[i]=1;
  28.  
  29. for (int i=1;i<=q;i++){
  30. int a,b;
  31. scanf("%d %d", &a, &b);
  32. int menor=100001,maior=0;
  33. unite(a,b);
  34. for (int j=1;j<=n;i++){
  35. menor=min(menor,sz[find(j)]);
  36. maior=max(maior,sz[find(j)]);
  37. }
  38. int ok=0;
  39. for (int i=1;i<=n;i++){
  40. if(find(i)!=find(1))ok=1;
  41. }
  42. if(ok){
  43. int c=maior-menor;
  44. printf("%d\n", c);}
  45. else printf("0\n");
  46. }
  47.  
  48. return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement