太神啦翻popoqqq博客才知道了解法
构图找直径即可
/**************************************************************
Problem: 2657
User: di4CoveRy
Language: C++
Result: Accepted
Time:2724 ms
Memory:21308 kb
****************************************************************/
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <cstring>
#define N 200050
using namespace std;
map< pair<int,int>,int> portal;
vector<int> e[N];
int dep[N],vis[N],mx,x,n;
void dfs(int u) {
vis[u] = 1;
if (dep[u] > mx) { mx = dep[u] , x = u; }
for (int i=0;i<(int)e[u].size();i++) {
int v = e[u][i]; if (vis[v]) continue;
dep[v] = dep[u] + 1; dfs(v);
}
}
void connect(int x,int u,int v) {
if (u > v) swap(u,v);
pair<int,int> tmp;
tmp = make_pair(u,v);
int cur = portal[tmp];
if (cur == 0)
portal[ tmp ] = x;
else
e[cur].push_back(x) , e[x].push_back(cur);
}
int main() {
scanf("%d",&n);
for (int _=1;_<=n-2;_++) {
int p,q,r;
scanf("%d%d%d",&p,&q,&r);
connect(_,p,q);
connect(_,p,r);
connect(_,q,r);
}
memset(dep,0,sizeof(dep));
memset(vis,0,sizeof(vis));
dep[1] = 1 , mx = 0 , dfs(1);
memset(dep,0,sizeof(dep));
memset(vis,0,sizeof(vis));
dep[x] = 1 , mx = 0 , dfs(x);
printf("%d\n",mx);
return 0;
}