|  | 
|  | 
| вернуться в форум | Why WA#7? Послано sherry  24 июл 2008 12:57#include<stdio.h>#include<stdlib.h>
 #define max(a,b) a>b? a:b
 int save[6002],save2[6001];
 int boss[6002], l[6002],r[6002],mark[6002],v[6002],used[6002];
 long p[6002][2];
 int top;
 int solve()
 {
 int i,j,k,c;
 int x=0,y;
 if(!save[1])return 0;
 for(y=1;save[y];y++)
 {
 i=save[y];
 if(!used[i])
 {
 p[i][1]=v[i];
 p[i][1]+=p[l[i]][0];
 c=r[l[i]];
 while(c)
 {
 p[i][1]+=p[c][0];
 c=r[c];
 }
 p[i][0]=max(p[l[i]][0],p[l[i]][1]);
 c=r[l[i]];
 while(c)
 {
 p[i][0]+=max(p[c][0],p[c][1]);
 c=r[c];
 }
 save2[++x]=boss[i];
 used[i]=1;
 }
 
 }
 for(i=1;save[i];i++)
 {
 save[i]=save2[i];
 }
 solve();
 return 0;
 }
 
 
 int main()
 {
 int i, j,k;
 int x,y;
 int num;
 scanf("%d",&num);
 for(i=1;i<=num;i++)
 scanf("%d",&v[i]);
 while(scanf("%d%d",&x,&y)==2)
 {
 if(!x)break;
 boss[x]=y;
 if(l[y])
 {
 r[l[y]]=x;mark[y]=x;
 }
 else
 {
 l[y]=x;mark[y]=x;
 }
 }
 for(i=1;i<=num;i++)
 if(!boss[i])break;
 top=i;
 j=0;
 for(i=1;i<=num;i++)
 if(!l[i])
 {
 save[++j]=boss[i];
 p[i][0]=0;
 p[i][1]=v[i];
 }
 solve();
 printf("%ld\n",max(p[top][1],p[top][0]));
 //    system("pause");
 return 0;
 }
 
 
 
 
Re: Why WA#7? Послано sherry  24 июл 2008 12:59Can 2 poeple supervise 1 person?Re: Why WA#7? Послано sherry  24 июл 2008 15:17I find a mistake yet, so careless~~a subscrib was miswritten~~~
 | 
 | 
|