Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 10326 | Accepted: 5913 |
Description
Input
L K
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line
0 0
Output
Sample Input
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0
Sample Output
5
Source
題意:公司人要開party,要從N個人之間選幾人是興奮值最大(2--N+1行,每個人都有唯一的興奮值)
剩下幾行是從屬關係,左邊的是右邊的直接下屬,但選擇的時候,要避開這種直接領導關係,最多只能去一人,問興奮值最大是多少?
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 7000
using namespace std;
int dp[maxn][2];//1 去 0 不去
int father[maxn];
int vis[maxn];
int n;
void dfs(int root)
{
for(int i=1;i<=n;i++)
{
if(father[i]==root)
{
dfs(i);
dp[root][1]+=dp[i][0];
dp[root][0]+=max(dp[i][0],dp[i][1]);
}
}
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&dp[i][1]);
}
int l,k;
int root=0;
int flag=1;
memset(vis,0,sizeof(vis));
while(scanf("%d%d",&l,&k),l||k)
{
father[l]=k;
if(root==l||flag)
{
root=k;
}
}
while(father[root])
{
root=father[root];
}
dfs(root);
int ans=max(dp[root][0],dp[root][1]);
printf("%d\n",ans);
}
return 0;
}