Guest User

Untitled

a guest
May 27th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<list>
  5.  
  6. using namespace std;
  7.  
  8. struct rt {
  9. int to,nr;
  10. };
  11.  
  12. int n,m;
  13. list<int> G[50010];
  14. vector<int> rts[50010];
  15. int odd;
  16. int cnta,cntb;
  17.  
  18. void edfs(int f)
  19. {
  20. while(!G[f].empty())
  21. {
  22. int g=G[f].back();
  23. G[f].pop_back();
  24. for(list<int>::iterator it=G[g].begin();it!=G[g].end();it++)
  25. {
  26.  
  27. if(f==(*it)) {G[g].erase(it); break; }//
  28. }
  29.  
  30. edfs(g);
  31.  
  32. }
  33. if(f==odd)
  34. {
  35. cnta++;
  36. }else rts[cnta].push_back(f);
  37.  
  38. }
  39.  
  40. int main()
  41. {
  42. int Z;
  43. scanf("%d",&Z);
  44. while(Z--)
  45. {
  46. scanf("%d %d",&n,&m);
  47. //clear
  48. for(int i=0;i<=n+5;i++)
  49. {
  50. G[i].clear();
  51. rts[i].clear();
  52. }
  53. odd=-1; cnta=0;cntb=0;
  54.  
  55. for(int i=1;i<=m;i++)
  56. {
  57. int a,b;
  58. scanf("%d %d",&a,&b);
  59. G[a].push_back(b);
  60. G[b].push_back(a);
  61. }
  62. for(int i=1;i<=n;i++)
  63. {
  64. if(G[i].size()%2!=0)
  65. {
  66. odd=n+1;
  67. G[i].push_back(odd);
  68. G[odd].push_back(i);
  69. }
  70. }
  71. if(odd==-1)
  72. {
  73. edfs(1);
  74. }
  75. else
  76. edfs(odd);
  77.  
  78. for(int i=0;i<=cnta;i++)
  79. if(rts[i].size()>1) cntb++;
  80. printf("%d\n",cntb);
  81. for(int i=0;i<=cnta;i++)
  82. {
  83. if(rts[i].size()>1) {
  84. int r=rts[i].size();
  85. printf("%d ",r);
  86. for(unsigned j=0;j<rts[i].size();j++)
  87. {
  88. printf("%d ",rts[i][j]);
  89. }
  90. printf("\n");
  91. }
  92. }
  93.  
  94. }
  95.  
  96. return 0;
  97. }
Add Comment
Please, Sign In to add comment