60分求调
查看原帖
60分求调
578029
ivyjiao楼主2024/5/9 19:44
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
int n,x,y,ans;
bool vis[200001];
vector<pair<int,int> >G[200001];
void dfs(int u,int sum,int dep){
    if(dep>3){
        ans=max(sum,ans);
        return;
    }
    int fst=0,sec=0,thd=0;
    for(int i=0;i<G[u].size();i++){
        if(!vis[G[u][i].se]){
            vis[G[u][i].se]=1;
            dfs(G[u][i].se,sum+G[u][i].fi,dep+1);
            vis[G[u][i].se]=0;
        }
        if(G[u][i].se>fst) thd=sec,sec=fst,fst=G[u][i].se;
        else if(G[u][i].se>sec) thd=sec,sec=G[u][i].se;
        else if(G[u][i].se>thd) thd=G[u][i].se;
    }
    ans=max(ans,fst+sec+thd);
}
signed main(){
    cin>>n;
    for(int i=1;i<=n-1;i++){
        cin>>x>>y;
        G[x].push_back({y,i+1});
        G[i+1].push_back({y,x});
    }
    for(int i=1;i<=n;i++){
        memset(vis,0,sizeof vis);
        vis[i]=1;
        dfs(i,0,1);
    }
    cout<<ans;
}
2024/5/9 19:44
加载中...