记录编号 388606 评测结果 AAAAA
题目名称 通讯问题 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2017-03-29 15:15:07 内存使用 0.32 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<vector>
  6. #include<stack>
  7. #include<algorithm>
  8. using namespace std;
  9. int n,a,b,all;
  10. int dfn[101],low[101];
  11. bool pan[101];
  12. vector<int> tx[101];
  13. stack<int> tar;
  14. struct ans
  15. {
  16. int min;
  17. priority_queue<int> q;
  18. ans(){min=0x7ffff;}
  19. bool operator < (const ans A)const
  20. {
  21. return min<A.min;
  22. }
  23. }sum[101];
  24. void tj(int now,int df)
  25. {
  26. dfn[now]=df;
  27. low[now]=dfn[now];
  28. tar.push(now);
  29. pan[now]=1;
  30. for(int i=0;i<tx[now].size();i++)
  31. {
  32. int nt=tx[now][i];
  33. if(!pan[nt])
  34. {
  35. tj(nt,df+1);
  36. }
  37. low[now]=min(low[now],low[nt]);
  38. }
  39. if(dfn[now]==low[now])
  40. {
  41. all++;
  42. while(tar.top()!=now)
  43. {
  44. if(tar.top()<sum[all].min)sum[all].min=tar.top();
  45. sum[all].q.push(-tar.top());
  46. tar.pop();
  47. }
  48. if(tar.top()<sum[all].min)sum[all].min=tar.top();
  49. sum[all].q.push(-tar.top());
  50. tar.pop();
  51. }
  52. }
  53. int main()
  54. {
  55. freopen("jdltt.in","r",stdin);
  56. freopen("jdltt.out","w",stdout);
  57. scanf("%d",&n);
  58. while(scanf("%d%d",&a,&b)!=EOF)
  59. {
  60. tx[a].push_back(b);
  61. }
  62. for(int i=1;i<=n;i++)
  63. {
  64. if(pan[i])continue;
  65. tj(i,1);
  66. }
  67. printf("%d\n",all);
  68. sort(sum+1,sum+(all+1));
  69. for(int i=1;i<=all;i++)
  70. {
  71. while(!sum[i].q.empty())
  72. {
  73. printf("%d ",-sum[i].q.top());
  74. sum[i].q.pop();
  75. }
  76. printf("\n");
  77. }
  78. return 0;
  79. }