5
1 12
1 7
2 1
3 5
正确输出 24,以下这份代码输出 20,去掉注释正确。
#include<bits/stdc++.h>
#define il inline
#define ui unsigned int
#define ll long long
#define ull unsigned ll
#define lll __int128
#define db double
#define ldb long double
#define pli pair<ll,int>
#define vi vector<int>
#define gi greater<int>
#define qi queue<int>
#define fir first
#define sec second
#define gc getchar
#define pc putchar
#define mst(arr,val) memset(arr,val,sizeof arr)
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pct __builtin_popcount
using namespace std;
const int N=2e5+10,INF=0x3f3f3f3f;
const ll INFll=0x3f3f3f3f3f3f3f3f;
il int rd() {int x=0,f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il ll rdll() {ll x=0; int f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il void wr(int x) {if(x<-2147483647) {printf("-2147483648"); return;} if(x<0) {pc('-'),wr(-x); return;} if(x<10) {pc(x+'0'); return;} wr(x/10),pc(x%10+'0');}
il void wrll(ll x) {if(x<-9223372036854775807) return (void)printf("-9223372036854775808"); if(x<0) return pc('-'),wrll(-x); if(x<10) return (void)pc(x+'0'); wrll(x/10),pc(x%10+'0');}
il void wr(int x,char *s) {wr(x),printf("%s",s);}
il void wrll(ll x,char *s) {wrll(x),printf("%s",s);}
int n,id,to[N],w[N],ne[N],head[N],a[N]; ll ans; pli f[N][4],s[N][4],t[N][4];
void add(int x,int y,int z) {to[++id]=y,w[id]=z,ne[id]=head[x],head[x]=id;}
void dfs(int u) {
for(int i=head[u],v;i;i=ne[i]) {
dfs(v=to[i]),a[v]=w[i];
for(int j=1;j<=3;j++) {
if(j>1&&!f[v][j-1].sec) continue; ll x=f[v][j-1].fir+w[i];
if(x>f[u][j].fir) t[u][j]=s[u][j],s[u][j]=f[u][j],f[u][j]={x,v};
else if(x>s[u][j].fir) t[u][j]=s[u][j],s[u][j]={x,v};
else if(x>t[u][j].fir) t[u][j]={x,v};
}
}
}
void QwQ() {
n=rd();
for(int i=2,x,y;i<=n;i++) x=rd(),y=rd(),add(x,i,y);
dfs(1);
for(int i=1;i<=n;i++) ans=max({ans,
f[i][3].sec?f[i][3].fir:0,
f[i][2].sec&&f[i][1].sec!=f[i][2].sec?f[i][1].fir+f[i][2].fir:0,
f[i][2].sec&&s[i][1].sec&&f[i][2].sec!=s[i][1].sec?f[i][2].fir+s[i][1].fir:0,
// s[i][2].sec&&f[i][1].sec!=s[i][2].sec?f[i][1].fir+s[i][2].fir:0,
s[i][1].sec&&i!=1?f[i][1].fir+s[i][1].fir+a[i]:0,
t[i][1].sec?f[i][1].fir+s[i][1].fir+t[i][1].fir:0});
wrll(ans,"\n");
}
signed main() {
int T=1; while(T--) QwQ();
}