zoukankan      html  css  js  c++  java
  • poj 1848 树形dp

    思路:表示我很弱,这个想不出dp方程,参考网上代码

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #define inf 1<<20
    #define Maxn 110
    using namespace std;
    int dp[Maxn][5],vi[Maxn];
    vector<int> head[Maxn];
    void init()
    {
        memset(dp,0,sizeof(dp));
        memset(vi,0,sizeof(vi));
        for(int i=0;i<=100;i++)
            head[i].clear();
    }
    void dfs(int u)
    {
        int i,v,sz;
        vi[u]=1;
        sz=head[u].size();
        int min1,min2,min3,sum;
        min1=min2=min3=inf;
        sum=0;
        for(i=0;i<sz;i++)
        {
            v=head[u][i];
            if(vi[v]) continue;
            dfs(v);
            sum+=dp[v][0];
            int temp=min(dp[v][1],dp[v][2])-dp[v][0];
            if(temp<min1)
            {
                min2=min1;
                min1=temp;
            }else if(temp<min2){
                min2=temp;
            }
            min3=min(min3,dp[v][2]-dp[v][0]);
        }
        dp[u][0]=1+sum+min(min1+min2,min3);
        dp[u][1]=sum;
        dp[u][2]=sum+min1;
    }
    int main()
    {
        int n,i,j,a,b;
        while(scanf("%d",&n)!=EOF)
        {
            init();
            for(i=1;i<n;i++){
                scanf("%d%d",&a,&b);
                head[a].push_back(b);
                head[b].push_back(a);
            }
            dfs(1);
            if(dp[1][0]>=inf) printf("-1
    ");
            else printf("%d
    ",dp[1][0]);
        }
        return 0;
    }
  • 相关阅读:
    Spring框架概念
    git stash 用法总结和注意点
    Java虚拟机:对象创建过程与类加载机制、双亲委派模型
    办公软件技巧
    Zookeeper到底是干嘛的
    ANdroid Studio下载
    node.js网络(net)
    显示日期
    打包apk

  • 原文地址:https://www.cnblogs.com/wangfang20/p/3251523.html
Copyright © 2011-2022 走看看