标签:input ural ide stream mis multi com contains cpp
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7324 Accepted Submission(s):
3627
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
return x*f;
}
const int MAXN=20001;
const int INF=999999;
int N,M; int len[MAXN];
vector<int> vec[MAXN];
struct data{
int Son,k;
}dp[MAXN][3];
int fap[MAXN];
int ans=0;
void dfs(int x,int fa){
for(int i=0;i<vec[x].size();i++){
if(vec[x][i]!=fa) dfs(vec[x][i],x);
}
for(int i=0;i<vec[x].size();i++){
int son=vec[x][i];
if(son==fa) continue;
if(dp[x][0].k<dp[son][0].k+len[son]) dp[x][0].k=dp[son][0].k+len[son],dp[x][0].Son=son;
}
for(int i=0;i<vec[x].size();i++){
int son=vec[x][i];
if(son==fa||son==dp[x][0].Son) continue;
if(dp[x][1].k<dp[son][0].k+len[son]) dp[x][1].k=dp[son][0].k+len[son];
}
}
void dfs2(int x,int fa){
if(fa!=-1){
dp[x][2].k=dp[fap[x]][2].k+len[x];
if(dp[fap[x]][0].Son!=x) dp[x][2].k=max(dp[x][2].k,dp[fap[x]][0].k+len[x]);
else dp[x][2].k=max(dp[x][2].k,dp[fap[x]][1].k+len[x]);
}
for(int i=0;i<vec[x].size();i++){
if(vec[x][i]!=fa) dfs2(vec[x][i],x);
}
return ;
}
int main(){
while(scanf("%d",&N)!=EOF){
for(int i=1;i<=N;i++){
dp[i][0].k=dp[i][1].k=dp[i][2].k=0;
dp[i][0].Son=dp[i][1].Son=0;
vec[i].clear(); fap[i]=0;
len[i]=0;
}
for(int i=2;i<=N;i++){
int fat=read(),ltg=read();
vec[fat].push_back(i);
len[i]=ltg; fap[i]=fat;
}
dfs(1,-1);dfs2(1,-1);
for(int i=1;i<=N;i++) cout<<max(dp[i][0].k,dp[i][2].k)<<endl;
}
}
标签:input ural ide stream mis multi com contains cpp
原文地址:http://www.cnblogs.com/wxjor/p/7270764.html