zoukankan      html  css  js  c++  java
  • CJOJ 2171 火车站开饭店(树型动态规划)

    CJOJ 2171 火车站开饭店(树型动态规划)

    Description

    政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开。任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相连接的火车站。
    告诉你每个火车站的利润,问你可以获得的最大利润为多少?
    例如下图是火车站网络:
    这里写图片描述
    最佳投资方案是 1 , 2 , 5 , 6 这 4 个火车站开饭店可以获得的利润为 90.

    Input

    第一行输入整数 N(<=100000), 表示有 N 个火车站,分别用 1,2,……..,N 来编号。
    接下来 N 行,每行一个整数表示每个站点的利润,接下来 N-1 行描述火车站网络,每行两个整数,表示相连接的两个站点。

    Output

    输出一个整数表示可以获得的最大利润。

    Sample Input

    6
    10
    20
    25
    40
    30
    30
    4 5
    4 6
    3 4
    1 3
    2 3

    Sample Output

    90

    Http

    CJOJ:http://oj.changjun.com.cn/problem/detail/pid/2171

    Source

    树型动态规划

    解决思路

    这道题与POJ2342真是有异曲同工之妙,这里不再过多叙述,请参考这里

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    const int maxN=100001;
    const int inf=2147483647;
    
    int n;
    int Value[maxN];
    vector<int> E[maxN];
    int F[maxN][5]={0};
    bool vis[maxN]={0};
    
    void dfs(int u);
    
    int main()
    {
    	int u,v;
    	cin>>n;
    	for (int i=1;i<=n;i++)
    		scanf("%d",&Value[i]);
    	for (int i=1;i<n;i++)
    	{
    		scanf("%d%d",&u,&v);
    		E[u].push_back(v);
    		E[v].push_back(u);
    	}
    	dfs(1);
    	cout<<max(F[1][1],F[1][0])<<endl;
    	return 0;
    }
    
    void dfs(int u)
    {
    	vis[u]=1;
    	F[u][1]=Value[u];
    	F[u][0]=0;
    	for (int i=0;i<E[u].size();i++)
    	{
    		int v=E[u][i];
    		if (vis[v]==0)
    		{
    			dfs(v);
    			F[u][1]+=F[v][0];
    			F[u][0]+=max(F[v][1],F[v][0]);
    		}
    	}
    	return;
    }
    
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    修改注册表启动项
    修改IP和DNS的dos命令
    屏蔽windows快捷键的方法
    本地IP,掩码,网关,DNS设置
    DevExpress的提示框
    ASP.NET如何批量保存动态生成的文本框?
    [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法
    如何用C#对Gridview的项目进行汇总统计?
    如何用javasript对Gridview的项目进行汇总统计?
    [转]C#如何获取客户端IP地址
  • 原文地址:https://www.cnblogs.com/SYCstudio/p/7138199.html
Copyright © 2011-2022 走看看