Advertisement
Augenbrauen

jakieś tam plebejskie DFSy

Nov 19th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<vector<pair<int, bool> > > G;
  5. vector<bool> odwiedz;
  6. vector<int> zlekrawedzie;
  7. vector<int> wynik;
  8. int answ = 1e9;
  9.  
  10. void DFS (int v)
  11. {
  12.     odwiedz[v] = true;
  13.     for (int i = 0; i < int(G[v].size()); ++i)
  14.     {
  15.         int u = G[v][i].first;  
  16.         if (!odwiedz[u])
  17.         {
  18.             DFS(u);
  19.             zlekrawedzie[v] += zlekrawedzie[u] + int(G[v][i].second);
  20.         }        
  21.     }
  22. }
  23.  
  24. void DFS2 (int v)
  25. {
  26.     odwiedz[v] = true;
  27.     for (int i = 0; i < int(G[v].size()); ++i)
  28.     {
  29.         int u = G[v][i].first;
  30.         if(!odwiedz[u])
  31.         {
  32.             if(G[v][i].second)
  33.                 wynik[u] = wynik[v] + 1;
  34.             else
  35.                 wynik[u] = wynik[v] - 1;
  36.             DFS2(u);
  37.         }
  38.     }
  39. }
  40.  
  41.  
  42. int main ()
  43. {
  44.     ios_base::sync_with_stdio(0);
  45.     cin.tie(0);
  46.  
  47.     int N;
  48.     cin >> N;
  49.     G.resize(N);
  50.     odwiedz.resize(N);
  51.     zlekrawedzie.resize(N);
  52.     for(int i = 0; i < N - 1; ++i)
  53.     {
  54.         int a, b;
  55.         cin >> a >> b;
  56.         --a;
  57.         --b;
  58.         G[a].emplace_back(b, true);
  59.         G[b].emplace_back(a, false);
  60.     }
  61.     DFS(0);
  62.     wynik.resize(N);
  63.     wynik[0] = zlekrawedzie[0];
  64.     DFS2(0);
  65.  
  66.     for (int i = 0; i < N; ++i)
  67.         answ = min(answ, zlekrawedzie[i]);    
  68.    
  69.     cout << answ;
  70.  
  71.  
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement