虽然会T,但我不知道思路哪有问题
#include<bits/stdc++.h>
#define N 200200
#define int long long
using namespace std;
int n,ind,x,d[N],cnt,fa[N],dfn[N],loop[N];
int cutu,cutv,max_sum,root,ans=1e18+5,cnt1;
bool inloop[2*N];
struct node{int to,dis;};
vector<node>g[2*N];
void get_loop(int u)
{
dfn[u]=++ind;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].to;
if(v==fa[u])continue;
if(dfn[v])
{
if(dfn[v]<dfn[u])continue;
loop[++cnt]=v;inloop[v]=1;
for(;v!=u;v=fa[v])
{
loop[++cnt]=fa[v];
inloop[fa[v]]=1;
}
}
else
{
fa[v]=u;
get_loop(v);
}
}
}
void dfs(int u,int fa,int sum)
{
if(g[u].size()==1)
{
d[x]=max(d[x],sum);
return;
}
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].to;
if(fa==v||inloop[v])continue;
dfs(v,u,sum+g[u][i].dis);
}
}
void dfs1(int u,int fa,int sum)
{
bool flag=1;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].to;
// cout<<v<<endl;
if(fa==v)continue;
if(!inloop[v])continue;
if(cutu==u&&cutv==v||cutu==v&&cutv==u)
{
// cout<<cutu<<" "<<u<<" "<<cutv<<' '<<v<<endl;
continue;
}
// cout<<v<<' '<<u<<" "<<sum+g[u][i].dis<<endl;
flag=0;
dfs1(v,u,sum+g[u][i].dis);
}
if(flag)
{
if(sum>max_sum)
{
root=u;
max_sum=sum;
}
return;
}
}
signed main()
{
cin>>n;
for(int i=1,u,v,w;i<=n;i++)
{
cin>>u>>v>>w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
for(int i=1;i<=n;i++)if(!dfn[i])get_loop(i);
for(int i=1;i<=cnt;i++)
{
x=i;
dfs(loop[i],0,0);
g[loop[i]].push_back({++cnt1+n,d[i]});
g[cnt1+n].push_back({loop[i],d[i]});
inloop[cnt1+n]=1;
// cout<<loop[i]<<endl;
}
loop[++cnt]=loop[1];
for(int i=1;i<cnt;i++)
{
cutu=loop[i];cutv=loop[i+1];
max_sum=-1;
dfs1(1,0,0);
// cout<<root<<" "<<max_sum<<endl;
max_sum=-1;
dfs1(root,0,0);
// cout<<root<<" "<<max_sum<<endl;
ans=min(ans,max_sum);
}
cout<<ans;
return 0;
}