Advertisement
Guest User

Untitled

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