水牛♂ToTo

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
相当经典的动归.

#include<stdio.h>
const int MAX=100001;
int f[MAX];
struct{
  int z,y;
}arr[2*MAX];
int main(){
  int N,n,i,j,max,num;
  while(scanf("%d",&N)!=-1){
    i=1;
    while(i<=N){
      scanf("%d",&f[i++]);
    }
    scanf("%d",&n);
    i=0;
    while(i<n){
      scanf("%d %d",&arr[i].z,&arr[i].y);
      i++;
    }
    num=0;
    for(i=n-1;i>=0;){
       max=0;
       for(j=i;j>=0&&arr[j].z==arr[i].z;j--){
         if(f[arr[j].y]>max)
           max=f[arr[j].y];
       }
       f[arr[i].z]+=max;
       if(f[arr[i].z]>num)
         num=f[arr[i].z];
       i=j;
    }
    printf("%d"n",num);
  }
}


posted on 2007-09-01 02:49  saintqdd  阅读(436)  评论(0)    收藏  举报