被最后三个点hack了,求调
查看原帖
被最后三个点hack了,求调
1072842
qimuke楼主2025/6/12 21:45
#include<bits/stdc++.h>
using namespace std;
#define inf 200005
#define N 100005
#define int long long
int n,m,cnt,k;
int a[inf],b[inf];

struct node{
	int y,w;
}nd,n1,n2;
vector<node>v[inf],v1;
//inline int read()
//{
//	int x=0,f=1;char ch=getchar();
//	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
//	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
//	return x*f;
//}


bool cmp(node a,node b){
	if(a.w>b.w)return 1;
	return 0;
}
void solve(){
	cin>>n;
	int x,y;
	int ans=0;
	for(int i=2;i<=n;i++){
		cin>>x>>y;
		nd.y=x;nd.w=y;
		v[i].push_back(nd);
		nd.y=i;
		v[x].push_back(nd);
	}
	for(int i=1;i<=n;i++)sort(v[i].begin(),v[i].end(),cmp);
	for(int i=1;i<=n;i++){
		if(v[i].size()<3)continue;
		v1=v[i];
		ans=max(ans,v1[0].w+v1[1].w+v1[2].w);
	}
//	cout<<ans<<endl;
	for(int i=1;i<=n;i++){
		if(v[i].size()<=1)continue;
		for(int j=0;j<v[i].size();j++){
			v1=v[i];
			nd=v1[j];
			if(v[nd.y].size()<=1)continue;
			if(j==0)n1=v1[1];
			else n1=v1[0];
			v1=v[nd.y];
			if(v1[0].y==i)n2=v1[1];
			else n2=v1[0];
			ans=max(ans,nd.w+n1.w+n2.w);
		}
	}
	cout<<ans<<endl;
}
signed main(){
	int T=1;
//	cin>>T;
	while(T--){
		solve();
	}
}

2025/6/12 21:45
加载中...