http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4371
水题,不过当时写的很挫~
#include<iostream>
#include<vector>
#include<map>
#include<stack>
#include<algorithm>
#include<queue>
#include<list>
#include<set>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<ctype.h>
#include<iomanip>
using namespace std;
#define LL long long
#define L long
#define pi acos(-1)
#define N 1100
#define INF 9999999999
#define eps 1e-8
struct node
{
int id;
int val;
};
vector<node> v[100100];
int s[100100];
int c[100100];
int cnt;
int n;
void init()
{
int i;
for(i=0;i<n;i++)v[i].clear();
}
void solve(int a)
{
int i,j,k;
for(i=0;i<v[a].size();i++)
{
s[cnt++]=v[a][i].val;
solve(v[a][i].id);
}
}
int main()
{//freopen("a.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
int i,j,k;
node p;
scanf("%d",&c[0]);
init();
for(i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
c[i]=b;
p.id=i,p.val=b;
v[a].push_back(p);
}
scanf("%d",&k);
while(k--)
{
int a;
scanf("%d",&a);
cnt=0;
solve(a);
s[cnt++]=c[a];
sort(s,s+cnt);
if(cnt<3)
printf("-1\n");
else
printf("%d %d% d\n",s[cnt-1],s[cnt-2],s[cnt-3]);
}
}
return 0;
}