613. 火车站饭店

★☆   输入文件: profitz.in   输出文件: profitz.out    简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开。任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相连接的火车站。

告诉你每个火车站的利润,问你可以获得的最大利润为多少?

例如下图是火车站网络:

最佳投资方案是 1 , 2 , 5 , 6 这 4 个火车站开饭店可以获得的利润为 90.

【输入格式】

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

【输出格式】

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

【样例输入】


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

【样例输出】

90

树形DP 此题不需要转化成二叉树(其实我也不会......)

由儿子的最大值推得父亲的最大值

原来写过一个类似的  上司的舞会

而且这次也写saca了

存反向边一开始s数组开的不够 导致RE7组

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<ctime>
using namespace std;
const int lim=100011;
int m,root,z;
int d[lim];
struct self{int x,y;}s[lim*2];
int first[lim*2],nxt[lim*2];vector<int>g[lim];
int a,b,c;
int f[lim][2];
bool flag[lim];void maketree(int i)
{flag[i]=1;for(int e=first[i];e!=-1;e=nxt[e])if(!flag[s[e].y]){g[i].push_back(s[e].y);maketree(s[e].y);}
}int work(int i,int chosen)
{if(f[i][chosen]!=-1)return f[i][chosen];if(chosen==0){f[i][chosen]=0;for(int k=0;k<g[i].size();k++)f[i][chosen]+=max(work(g[i][k],0),work(g[i][k],1));return f[i][chosen];}f[i][chosen]=d[i];for(int k=0;k<g[i].size();k++)f[i][chosen]+=work(g[i][k],0);return f[i][chosen];
}int main()
{srand(time(NULL));freopen("profitz.in","r",stdin);freopen("profitz.out","w",stdout);memset(first,-1,sizeof(first));memset(nxt,-1,sizeof(nxt));memset(f,-1,sizeof(f));scanf("%d",&m);for(a=1;a<=m;a++)scanf("%d",&d[a]);for(a=1;a<m;a++){scanf("%d%d",&s[a].x,&s[a].y);s[a+m].x=s[a].y;s[a+m].y=s[a].x;nxt[a]=first[s[a].x];first[s[a].x]=a;nxt[a+m]=first[s[a].y];first[s[a].y]=a+m;}root=rand()%m+1;maketree(root);z=max(work(root,0),work(root,1));cout<<z<<'\n';return 0;
}

COGS 613 火车站饭店相关推荐

  1. COGS 613. 火车站饭店 解题报告

    613. 火车站饭店 政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开.任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相连接的火车站. 告诉你每个火车站的利润,问你可以获得 ...

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

    CJOJ 2171 火车站开饭店(树型动态规划) Description 政府邀请了你在火车站开饭店,但不允许同时在两个相连的火车站开.任意两个火车站有且只有一条路径,每个火车站最多有 50 个和它相 ...

  3. 青岛各饭店餐馆订餐电话大全

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 来源:http:/ ...

  4. 不上班的 613 天

    人生充满了随机性,很多事情都不在我们的计划之中. 比如此刻的我,于 2020 年的情人节,坐在苏黎世联邦理工学院(ETH),回顾着从离职到现在的 613 天,准备写下这段时间的经历和感受.今天既不是旧 ...

  5. 江苏盐城高端酒店标杆--港府君澜大饭店新店开业

    盐城,江苏省地级市,长江三角洲中心区27城之一.地处中国东部沿海地区,江苏省中部,东临黄海,南与南通接壤,西南与扬州.泰州为邻,西北与淮安市相连,北隔灌河和连云港市相望.盐城海陆空交通便捷,基本形成高 ...

  6. 为什么火车站旁边的肯德基能挤死中餐馆?

    五一出去玩了一下,在火车站准备吃点东西,不是饭点时间,但肯德基里面很拥挤,没位置坐.于是想到旁边的中餐馆去吃,找了一下,只有四家,都很冷清,其中两家还是主打那种做好菜放在盆子里,自己打几个菜这个的,这 ...

  7. c4d教程-太空火车站场景创作视频教程Skillshare – Create A Space Train Scene With Cinema 4D Redshift Render

    c4d教程-太空火车站场景创作视频教程Skillshare – Create A Space Train Scene With Cinema 4D & Redshift Render 教程大小 ...

  8. 苹果手机在火车站被偷的状况下如何定位找回

    苹果手机在火车站被偷的状况下如何定位找回. 首先打开"itunes",选择菜单栏的"文件"-"将文件添加到资料库" 选择要做铃声的歌曲,单击 ...

  9. MATLAB_图形学_形态学课程_温馨饭店招牌扣出‘温馨饭店’四个大字

    关于温馨饭店的! 原图: 目的: 思路: 首先转化为二值图: 然后膨胀一下,这个是因为不进行膨胀的话,第二个字:温馨的"馨".无法进行图像恢复. 没有连接到一起就会得到下面的结果: ...

最新文章

  1. 读取jar包资源代码赏析
  2. phpcmsv9多表联合查询分页功能实现
  3. 百度超级链XChain(12)平行链与群组
  4. 【笔记】MATLAB中的图形(2)
  5. SparkSQL DataFrame进阶篇
  6. k8---proxy
  7. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)
  8. SpringBoot实战(十二):集成 Spring Boot Admin 监控
  9. 常见的C++应用领域有哪些?
  10. Spring帖子汇总
  11. Oracle 统计信息收集
  12. groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration...
  13. 汇编:call和jmp
  14. Vue 事件修饰符(stop、prevent、self、capture、once、passive)
  15. kinetis FTM 分析笔记
  16. 树莓派——槑槑智能音箱
  17. SQL 查询的分布式执行与调度
  18. English trip V2 - 8 Holidays and Birthdays Teacher:Julia Key: at on in
  19. 算术右移与逻辑右移的转换
  20. 2018年科研大事件——科学和伦理之间的较量

热门文章

  1. 有道云笔记markdown字体增大、生成目录
  2. 安迪·格鲁夫: 一个PC时代的大写符号
  3. 安迪的第一个字典(Andy‘s First Dictionary,UVa10815)
  4. 由ANSI标准定义的C语言关键字,C语言32个关键字详解
  5. 制作古装人物彩色工笔画图片的PS教程
  6. PostgreSQL 技术内幕(二) Greenplum-AO表
  7. Linux系统程序包管理工具-RPM
  8. 关于Allele(等位基因)的理解
  9. 学Python爬虫,就得从爬高清美图开始!
  10. 神经网络(四)-vanishing gradient problem