Advertisement
Manioc

Centroid

Oct 4th, 2018
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 100007
  3.  
  4. using namespace std;
  5.  
  6. vector<int> graph[MAX];
  7. struct Centroid {
  8.     int vis[MAX], siz[MAX], root;
  9.     int parent[MAX], layer[MAX];
  10.  
  11.     vector<int> tree[MAX];
  12.  
  13.     void init(){
  14.         for(int i = 0; i < MAX; i++){
  15.             vis[i] = siz[i] = layer[i] = parent[i] = 0;
  16.             tree[i].clear();
  17.         }
  18.     }
  19.  
  20.     int getCent(int u, int n, int p = 0){
  21.         for(int v: graph[u]){
  22.             if(!vis[v] && v != p && siz[v] > n/2) return getCent(v, n, u);
  23.         }
  24.  
  25.         return u;
  26.     }
  27.     int find(int u, int p = 0){
  28.         siz[u] = 1;
  29.         for(int v: graph[u]){
  30.             if(v != p && !vis[v]){
  31.                 find(v, u);
  32.                 siz[u] += siz[v];
  33.             }
  34.         }
  35.  
  36.         return p? 0: getCent(u, siz[u]);
  37.     }
  38.  
  39.     void build(int u = 0){
  40.         if(u == 0){
  41.             u = root = find(1);
  42.             vis[u] = 1;
  43.             layer[u] = 1;
  44.         }
  45.  
  46.         for(int v: graph[u]){
  47.             if(!vis[v]){
  48.                 int x = find(v);
  49.                 vis[x] = 1;
  50.                 layer[x] = layer[u] + 1;
  51.                 parent[x] = u;
  52.  
  53.                 tree[u].push_back(x);
  54.                 tree[x].push_back(u);
  55.                 build(x);
  56.             }
  57.         }
  58.     }
  59.  
  60.     vector<int> operator[](int i)const{
  61.         return tree[i];
  62.     }
  63. } c;
  64.  
  65. int vis[MAX], parent[LOG][MAX];
  66. void bfs(int no){
  67.    
  68. }
  69. int main(){
  70.     c.init();
  71.     int n, m; cin >> n >> m;
  72.     while(m--){
  73.         int a, b; cin >> a >> b;
  74.         graph[a].push_back(b);
  75.         graph[b].push_back(a);
  76.     }
  77.     cout << "oi\n";
  78.     c.build();
  79.     cout << "ola\n";
  80.     bfs(c.root);
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement