Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

递归太深了吧

Posted by ziliang at 2007-07-09 20:42:41 on Problem 3249
In Reply To:为什么我RE了, Posted by:drownever at 2007-07-09 17:08:01
> #include <iostream>
> #include <vector>
> using namespace std;
> int v[100001]; 
> vector<int> t[100001];
> int first[100001];
> int B[100001];
> 
> int dfs(int n)
> {
>     if(t[n].size()==0)
>        return v[n];
>     __int64 maxNext=0;
>     for(__int64 i=0;i<t[n].size();i++)
>     {
>        if(B[t[n][i]]==0) B[t[n][i]]=dfs(t[n][i]);
>        if(maxNext<B[t[n][i]])maxNext=B[t[n][i]];
>     }
>     return v[n]+maxNext;
> }
> 
> int main()
> {
>     __int64 n,m;
>     __int64 max=-999999999;
>     while(scanf("%I64d %I64d",&n,&m)!=EOF)
>     {
>        if(n==1 && m==0) { printf("0\n"); continue; }                
>                        
>         memset(first,0,sizeof(first));
>         memset(B,0,sizeof(B));
>         memset(t,0,sizeof(t));
>         memset(v,0,sizeof(v));
>         max=-999999999;
>         __int64 i,j;
>         for(i=1;i<=n;i++) scanf("%I64d",&v[i]);
>         for(i=1;i<=m;i++) 
>         {
>            __int64 e1,e2;
>            scanf("%I64d %I64d",&e1,&e2);
>            first[e2]=1;
>            t[e1].push_back(e2);
>         }
>         for(i=1;i<=n;i++)
>           if(first[i]==0)
>           {
>              if(B[i]==0) B[i]=dfs(i);
>              if(max<B[i])
>                 max=B[i];
>           }
>         printf("%I64d\n",max);
>     }
>     return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator