Advertisement
LinKin

Diameter

Aug 9th, 2014
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. vector<long> ed[MAX+7];
  2. long di1[MAX+7];
  3. long di2[MAX+7];
  4.  
  5. void Dfs( long u, long *di, vector<long> &li ){
  6.     li.pb( u );
  7.     long i;
  8.     for( i=0;i<ed[u].size();i++ ){
  9.         long v = ed[u][i];
  10.         if( di[v] != -1 ) continue;
  11.         di[v] = di[u] + 1; // can set cost instead of 1 for weigted tree
  12.         Dfs( v, di, li );
  13.     }
  14. }
  15.  
  16. void Diam( long u, long &l, long &r ){
  17.     vector<long> li;
  18.     di1[u] = 0;
  19.     Dfs( u, di1, li );
  20.  
  21.     long i,v1 = li[0];
  22.     for( i=0;i<li.size();i++ ){
  23.         if( di1[li[i]] > di1[v1] ) v1 = li[i];
  24.     }
  25.  
  26.     li.clear();
  27.     di2[v1] = 0;
  28.     Dfs( v1, di2, li );
  29.  
  30.     long v2 = v1;
  31.     for( i=0;i<li.size();i++ ){
  32.         if( di2[li[i]] > di2[v2] ) v2 = li[i];
  33.     }
  34.  
  35.     l = di2[v2];
  36.     r = (l+1)/2;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement