Advertisement
Guest User

Untitled

a guest
Jun 21st, 2015
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector< vector<int> > graph;
  6. vector<int> fup;
  7. vector<int> tin;
  8. vector<int> used;
  9. int timer = 0;
  10. vector<int> max_component_size;
  11. vector<int> rest;
  12.  
  13. int dfs(int v, int parent=-1) {
  14.     used[v] = true;
  15.     fup[v] = tin[v] = timer++;
  16.     int component_size = 1;
  17.     for (int u: graph[v]) {
  18.         if (u != parent) {
  19.             if (used[u]) {
  20.                 fup[v] = min(fup[v], tin[u]);
  21.             } else {
  22.                 int size_u = dfs(u, v);
  23.                 fup[v] = min(fup[v], fup[u]);
  24.                 component_size += size_u;
  25.                 if (fup[u] >= tin[v]) {
  26.                     max_component_size[v] = max(max_component_size[v], size_u);
  27.                     rest[v] -= size_u;
  28.                 }
  29.             }
  30.         }
  31.     }
  32.     return component_size;
  33. }
  34.  
  35. int main() {
  36.     ios_base::sync_with_stdio(false);
  37.  
  38.     int n, m;
  39.     cin >> n >> m;
  40.  
  41.     used.assign(n, false);
  42.     graph.assign(n, vector<int>());
  43.     fup.assign(n, -1);
  44.     tin.assign(n, -1);
  45.     max_component_size.assign(n, 0);
  46.     rest.assign(n, n - 1);
  47.  
  48.     for (int i = 0; i < m; i++) {
  49.         int a, b;
  50.         cin >> a >> b;
  51.         a--; b--;
  52.         graph[a].push_back(b);
  53.         graph[b].push_back(a);
  54.     }
  55.  
  56.     dfs(0);
  57.  
  58.     int dragon = 0;
  59.     int max_number = n;
  60.     for (int i = 0; i < n; i++) {
  61.         int number = max(max_component_size[i], rest[i]);
  62.         if (number < max_number) {
  63.             max_number = number;
  64.             dragon = i;
  65.         }
  66.     }
  67.  
  68.     cout << dragon + 1 << endl;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement