Advertisement
Pechckin

Untitled

Dec 13th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <set>
  6. #include <cmath>
  7.  
  8.  
  9. using namespace std;
  10.  
  11.  
  12.  
  13. struct edge {
  14. int b, c, f;
  15. };
  16. vector<edge> ed;
  17. vector<int> MASHA;
  18. vector<int> PETYA;
  19. vector<int> g[100010];
  20. vector<bool> color;
  21. int n, m, s, t;
  22. void add_edge(int a, int b) {
  23. edge e1 = {b, 1, 0};
  24. edge e2 = {a, 0, 0};
  25. g[a].push_back ((int) ed.size());
  26. ed.push_back (e1);
  27. g[b].push_back ((int) ed.size());
  28. ed.push_back (e2);
  29. }
  30.  
  31.  
  32.  
  33.  
  34.  
  35. int dfs(int v) {
  36. color[v] = 1;
  37. for(auto u:g[v]){
  38. if(color[ed[u].b] == 0 && ed[u].f < ed[u].c && (dfs(ed[u].b) || ed[u].b == t)){
  39. ed[u].f += 1;
  40. ed[u ^ 1].f -= 1;
  41. return 1;
  42.  
  43. }
  44. }
  45. return 0;
  46. }
  47.  
  48. void print_M( int v ) {
  49. MASHA.push_back(v);
  50. for(auto u:g[v])
  51. if (ed[u].f > 0) {
  52. ed[u].f--;
  53. print_M(ed[u].b);
  54. break;
  55. }
  56. }
  57.  
  58. void print_P( int v ) {
  59. PETYA.push_back(v);
  60. for(auto u:g[v])
  61. if (ed[u].f > 0) {
  62. ed[u].f--;
  63. print_P(ed[u].b);
  64. break;
  65. }
  66. }
  67.  
  68. int main() {
  69. ios_base::sync_with_stdio(0);
  70. cin.tie(0);
  71. cout.tie(0);
  72. cin >> n >> m >> s >> t;
  73. s--;
  74. t--;
  75. int v1,v2;
  76. while (m--) {
  77. cin >> v1 >> v2;
  78. add_edge(v1-1, v2-1);
  79. }
  80. for (int i = 0; i < 2; i++){
  81. color.assign(n,0);
  82. if (!dfs(s)) {
  83. cout << "NO\n";
  84. return 0;
  85. }
  86. }
  87.  
  88.  
  89.  
  90. cout << "YES\n";
  91. print_P(s);
  92. print_M(s);
  93.  
  94. for(auto M:MASHA){
  95. cout << M + 1 << ' ';
  96. }
  97. cout << '\n';
  98. for(auto P:PETYA){
  99. cout << P + 1 << ' ';
  100. }
  101. cout << '\n';
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement