Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- int node=-1;
- vector<int>adjlist[300001];
- int vis[300001];
- int maxi=0;
- int dfs(int c,int p,int g){
- if(vis[c]==1) return 0;
- vis[c]=1;
- for(int i=0;i<adjlist[c].size();i++){
- if(adjlist[c][i]==p) continue;
- int as=dfs(adjlist[c][i],c,g+1);
- maxi=max(as,maxi);
- }
- return g;
- }
- int dfs1(int c,int p){
- if(vis[c]==1) return 0;
- vis[c]=1;
- for(int i=0;i<adjlist[c].size();i++){
- if(adjlist[c][i]==p) continue;
- int g=0;
- g=dfs1(adjlist[c][i],c)+1;
- if(g>maxi){
- maxi=g; node = adjlist[c][i];
- }
- }
- return 1;
- }
- void solve(){ // testcases
- int n;
- scanf("%d",&n);
- int t2,t1;
- for(int i=0;i<n-1;i++){
- scanf("%d%d",&t1,&t2);
- adjlist[t1].push_back(t2);
- adjlist[t2].push_back(t1);
- }
- if(n==1) { printf("0\n"); return ; }
- dfs1(1,0);
- for(int i=0;i<=n;i++) vis[i]=0;
- maxi=0;
- dfs(node,0,0);
- // printf("node: %d\n",node);
- printf("%d\n",maxi*3);
- return;
- }
- int main(){
- int testcase=1,z=1;
- // scanf("%d",&testcase);
- while(z<=testcase){
- solve(); z++;
- }
- return 0;
- }
- /*
- 1
- 3
- 8 8 7
- */
- /*
- 6
- 1 2
- 1 3
- 1 4
- 1 5
- 3 6
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement