博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1217 [HNOI2003]消防局的设立 贪心
阅读量:5135 次
发布时间:2019-06-13

本文共 1811 字,大约阅读时间需要 6 分钟。

 [HNOI2003]消防局的设立

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 908  Solved: 531
[][][]

Description

2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地。起初为了节约材料,人类只修建了n-1条道路来
连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构。如果基地A到
基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d。由于火星上非常干燥,经常引发火灾,人类决定
在火星上修建若干个消防局。消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过2的基地的火灾。
你的任务是计算至少要修建多少个消防局才能够确保火星上所有的基地在发生火灾时,消防队有能力及时扑灭火灾

Input

第一行为n,表示火星上基地的数目。N<=1000
接下来的n-1行每行有一个正整数,其中文件第i行的正整数为a[i],表示从编号为i的基地到编号为a[i]的基地之间有一条道路,
为了更加简洁的描述树状结构的基地群,有a[i] < i

Output

仅有一个正整数,表示至少要设立多少个消防局才有能力及时扑灭任何基地发生的火灾。

Sample Input

6
1
2
3
4
5

Sample Output

2

HINT

 

Source

 

 尽量长度为5吧这样最优
 
1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 const int maxn = 1009; 8 9 int N, f[maxn], ans;10 11 struct edge {12 int to;13 edge* next;14 } E[maxn << 1], *pt = E, *head[maxn];15 16 inline void AddEdge(int u, int v) {17 pt->to = v;18 pt->next = head[u];19 head[u] = pt++;20 }21 22 void Init() {23 scanf("%d", &N);24 for(int i = 1; i < N; i++) {25 int v;26 scanf("%d", &v); v--;27 AddEdge(i, v);28 AddEdge(v, i);29 }30 ans = 0;31 }32 33 void DFS(int x, int p = -1) {34 int mn = maxn, mx = -maxn;35 for(edge* e = head[x]; e; e = e->next) if(e->to != p) {36 DFS(e->to, x);37 mn = min(f[e->to], mn);38 mx = max(f[e->to], mx);39 }40 if(mn + mx <= 3)41 f[x] = mn + 1;42 else43 f[x] = mx + 1;44 if(mn == maxn)45 f[x] = 3;46 if(f[x] == 5)47 ans++, f[x] = 0;48 else if(p < 0 && f[x] > 2)49 ans++;50 }51 52 int main() {53 54 Init();55 DFS(0);56 printf("%d\n", ans);57 58 return 0;59 }

 

转载于:https://www.cnblogs.com/fengzhiyuan/p/8682180.html

你可能感兴趣的文章
【PHP】在目标字符串指定位置插入字符串
查看>>
【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页...
查看>>
实验四2
查看>>
VS2012+Win7网站发布详细步骤
查看>>
Android现学现用第十一天
查看>>
Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
查看>>
多路复用
查看>>
python 列表
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>
【BZOJ1951】古代猪文(CRT,卢卡斯定理)
查看>>
poj 2823 线段树
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
Maximum Gap
查看>>
sublime3
查看>>