Advertisement
Augenbrauen

szybkie drogi, polskie drogi

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