fork download
  1. //
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. int n, t, u, a[200][200], b[200][200], visited[200];
  5. vector<int> ans;
  6. int degn[200] = {}, degp[200] = {};
  7. ifstream fin("CT.INP");
  8. ofstream fout("CT.OUT");
  9. void DFS(int u){
  10. visited[u] = 1;
  11. for(int i= 1; i<=n; i++)
  12. if(b[u][i] == 1 and visited[i] == 0)
  13. DFS(i);
  14. }
  15. int solve1(){
  16. DFS(1);
  17. for(int i=1; i<=n; i++)
  18. if(visited[i] == 0)
  19. return 0;
  20. for(int i=1; i<=n; i++)
  21. for(int j=1; j<=n; j++)
  22. degp[i] += a[i][j];
  23. for(int i=1; i<=n; i++)
  24. for(int j=1; j<=n; j++)
  25. degn[i] += a[j][i];
  26. int cnt = 0;
  27. for(int i=1; i<=n; i++)
  28. if(degn[i] != degp[i])
  29. cnt++;
  30. if(cnt == 0)
  31. return 1;
  32. if(cnt == 2)
  33. return 2;
  34. return 0;
  35. }
  36. void solve2(){
  37. stack<int> st;
  38. st.push(u);
  39. while(!st.empty()){
  40. int s = st.top();
  41. bool exist = 0;
  42. for(int i=1; i<=n; i++){
  43. if(a[s][i] == 1){
  44. st.push(i);
  45. exist = 1;
  46. a[s][i] = 0;
  47. break;
  48. }
  49. }
  50. if(exist == 0){
  51. st.pop();
  52. ans.push_back(s);
  53. }
  54. }
  55. for(int i=ans.size()-1; i>=0; i--)
  56. fout << ans[i] <<" ";
  57. }
  58. int main(){
  59. fin >> t;
  60. fin >> n;
  61. if(t==2)
  62. fin >> u;
  63.  
  64. for(int i=1; i<=n; i++)
  65. for(int j=1; j<=n; j++){
  66. fin >> a[i][j];
  67. if(a[i][j] == 1)
  68. b[i][j] = b[j][i] = a[i][j];
  69. }
  70. if(t == 1)
  71. fout << solve1();
  72. else
  73. solve2();
  74. return 0;
  75. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty