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

谁能讲一下与1463的区别,为什么同样的方法这里不行了

Posted by foreverago at 2011-08-08 16:19:48 on Problem 1243
#include <iostream>
#include <stdio.h>
#include <cstring>
#define N 10005
#define MIN(A,B) ((A)<(B)?(A):(B))
using namespace std;
struct edge
{
    int y,next;
} path[N*2];
int first[N],p,dp[N][2],n;

inline void add(int x,int y)
{
    path[p].y=y;
    path[p].next=first[x];
    first[x]=p++;
    path[p].y=x;
    path[p].next=first[y];
    first[y]=p++;
}
int min(int x,int y)
{
    return x<y?x:y;
}
int dfs(int root,int state,int pere)
{
    if(dp[root][state]>=0)return dp[root][state];
    int ans=state,t,tmp;
    for(int i=first[root];i!=-1;i=path[i].next)
    {
        t=path[i].y;
        if(t==pere)continue;
        if(state==1)
        {
            tmp=min(dfs(t,0,root),dfs(t,1,root));
        }else tmp=dfs(t,1,root);
        ans+=tmp;
    }
    return dp[root][state]=ans;
}
int main()
{
    freopen("in.txt","r",stdin);
    while(scanf("%d",&n)!=EOF)
    {
        int x,y;
        memset(first,-1,sizeof(first));
        p=0;
        for(int i=1; i<n; i++)
        {
            scanf("%d %d",&x,&y);
            add(x,y);
        }
        memset(dp,-1,sizeof(dp));
        int a=dfs(1,0,-1);
        int b=dfs(1,1,-1);
        printf("%d\n",a<b?a:b);
    }
    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