Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<long> ed[MAX+7];
- long di1[MAX+7];
- long di2[MAX+7];
- void Dfs( long u, long *di, vector<long> &li ){
- li.pb( u );
- long i;
- for( i=0;i<ed[u].size();i++ ){
- long v = ed[u][i];
- if( di[v] != -1 ) continue;
- di[v] = di[u] + 1; // can set cost instead of 1 for weigted tree
- Dfs( v, di, li );
- }
- }
- void Diam( long u, long &l, long &r ){
- vector<long> li;
- di1[u] = 0;
- Dfs( u, di1, li );
- long i,v1 = li[0];
- for( i=0;i<li.size();i++ ){
- if( di1[li[i]] > di1[v1] ) v1 = li[i];
- }
- li.clear();
- di2[v1] = 0;
- Dfs( v1, di2, li );
- long v2 = v1;
- for( i=0;i<li.size();i++ ){
- if( di2[li[i]] > di2[v2] ) v2 = li[i];
- }
- l = di2[v2];
- r = (l+1)/2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement