fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. struct DSU{
  5. vector<int>parent,gsize;
  6. int comps;
  7. int mxcmp;
  8. DSU(int maxi){
  9. parent=gsize=vector<int>(maxi+5);
  10. comps=maxi;
  11. mxcmp=1;
  12. for(int i=0;i<=maxi;i++){
  13. parent[i]=i,gsize[i]=1;
  14. }
  15. }
  16. int find_leader(int node){
  17. return parent[node]=(parent[node]==node?node:find_leader(parent[node]));
  18. }
  19. bool samel(int node1,int node2){
  20. return find_leader(node1)==find_leader(node2);
  21. }
  22. void union_set(int node1,int node2){
  23. int u=find_leader(node1),v=find_leader(node2);
  24. if(u==v)return;
  25. if(gsize[u]<gsize[v])swap(u,v);
  26. gsize[u]+=gsize[v],parent[v]=u;
  27. comps--;
  28. mxcmp=max(gsize[u],mxcmp);
  29. }
  30. int largest_comp(){
  31. return mxcmp;
  32. }
  33. };
  34. int main(){
  35. int n,m;
  36. cin>>n>>m;
  37. DSU dsu(n);
  38. for(int i=0;i<m;i++){
  39. int x,y;
  40. cin>>x>>y;
  41. int sz=0,cnt=0;
  42. dsu.union_set(x,y);
  43. cout<<dsu.comps<<" "<<dsu.largest_comp()<<"\n";
  44. }
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5324KB
stdin
Standard input is empty
stdout
Standard output is empty