2015 Multi-University Training Contest 1 hdu 5290 Bombing plan
Bombing plan
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 416 Accepted Submission(s): 96
Now kingdom Y is going to bomb kingdom X. Every city of kingdom X has its own value W. If city i was to be bombed, then all the cities that lie within the distance W(i) from city i would be destroyed as well. The king of kingdom Y wants to know the minimum bombing time that can destroy all the cities in kingdom X. Could you help him?
In each test case:
First line: an integer n(n<=10^5) indicating the number of city
Second line:contain n numbers w[i](0<=w[i]<=100) ,indicating that the value of city[i],
Next n - 1 lines: each contains two numbers ui and vi, (1 ≤ ui,vi<=n), indicates that there’s one road connecting city ui and vi.
转移方程:
不炸毁u点
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn = ;
- struct arc {
- int to,next;
- arc(int x = ,int y = -) {
- to = x;
- next = y;
- }
- } e[maxn<<];
- int head[maxn],d[maxn],n,tot;
- void add(int u,int v) {
- e[tot] = arc(v,head[u]);
- head[u] = tot++;
- e[tot] = arc(u,head[v]);
- head[v] = tot++;
- }
- int q[maxn],p[maxn],de[maxn],hd,tl;
- int F[maxn][],G[maxn][],A[maxn][],B[maxn][];
- int main() {
- int u,v,a,b;
- while(~scanf("%d",&n)) {
- for(int i = ; i <= n; ++i)
- scanf("%d",d+i);
- tot = ;
- memset(head,-,sizeof head);
- memset(G,-,sizeof G);
- memset(F,-,sizeof F);
- memset(A,-,sizeof A);
- memset(B,-,sizeof B);
- for(int i = ; i < n; ++i) {
- scanf("%d%d",&u,&v);
- add(u,v);
- }
- p[q[hd = tl = ] = ] = -;
- while(hd <= tl) {
- de[u = q[hd++]] = ;
- for(int i = head[u]; ~i; i = e[i].next) {
- if(e[i].to != p[u]) {
- p[e[i].to] = u;
- q[++tl] = e[i].to;
- }
- }
- }
- while(tl >= ) {
- v = q[tl--];
- if(p[v] >= ) de[p[v]] = max(de[p[v]],de[v]+);
- if(!de[v]) {
- if(d[v] >= ) {
- F[v][d[v]] = ;
- for(int i = ; i < d[v]; ++i) A[v][i] = -;
- for(int i = d[v]; i < ; ++i) A[v][i] = ;
- }
- G[v][] = ;
- for(int i = ; i <= ; ++i) B[v][i] = ;
- continue;
- }
- for(int i = ; i <= min(,de[v]); ++i) {
- G[v][i] = ;
- for(int j = head[v]; ~j; j = e[j].next) {
- u = e[j].to;
- if(u == p[v]) continue;
- a = B[u][i-];
- b = A[u][];
- if(a == - && b == -) {
- G[v][i] = -;
- break;
- }
- if(a == -) a = maxn;
- if(b == -) b = maxn;
- G[v][i] += min(a,b);
- }
- if(G[v][i] == -) break;
- }
- if(d[v] >= ) {
- F[v][d[v]] = ;
- for(int i = head[v]; ~i; i = e[i].next) {
- u = e[i].to;
- if(u == p[v]) continue;
- a = A[u][];
- b = -;
- if(d[v] > ) b = B[u][d[v]-];
- if(a == - && b == -) {
- F[v][d[v]] = -;
- break;
- }
- if(a == -) a = maxn;
- if(b == -) b = maxn;
- F[v][d[v]] += min(a,b);
- }
- }
- for(int i = head[v]; ~i; i = e[i].next) {
- u = e[i].to;
- if(u == p[v]) continue;
- for(int j = ; j <= ; ++j)
- if(F[u][j] != -) {
- int tmp = ;
- for(int k = head[v]; ~k; k = e[k].next) {
- if(e[k].to != u && e[k].to != p[v]) {
- a = A[e[k].to][];
- b = -;
- if(j - >= ) b = B[e[k].to][j-];
- if(a == - && b == -) {
- tmp = -;
- break;
- }
- if(a == -) a = maxn;
- if(b == -) b = maxn;
- tmp += min(a,b);
- }
- }
- if(tmp != - && (F[v][j-] == - || F[v][j-] > F[u][j] + tmp))
- F[v][j-] = F[u][j] + tmp;
- }
- }
- A[v][] = F[v][];
- B[v][] = G[v][];
- for(int i = ; i <= ; ++i) {
- A[v][i] = A[v][i-];
- if(F[v][i] != - && (A[v][i] == - || A[v][i] > F[v][i]))
- A[v][i] = F[v][i];
- B[v][i] = B[v][i-];
- if(G[v][i] != - && (B[v][i] == - || B[v][i] > G[v][i]))
- B[v][i] = G[v][i];
- }
- }
- int ret = -;
- for(int i = ; i <= ; ++i)
- if(F[][i] != - && (ret == - || ret > F[][i]))
- ret = F[][i];
- printf("%d\n",ret);
- }
- return ;
- }
- /*
- 5
- 1 1 1 1 1
- 1 2
- 2 3
- 3 4
- 4 5
- */
2015 Multi-University Training Contest 1 hdu 5290 Bombing plan的更多相关文章
- hdu 5290 Bombing plan
http://acm.hdu.edu.cn/showproblem.php?pid=5290 题意: 一棵树,每个点有一个权值wi,选择点i即可破坏所有距离点i<=wi的点,问破坏所有点 最少需 ...
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- 2015 Multi-University Training Contest 8 hdu 5383 Yu-Gi-Oh!
Yu-Gi-Oh! Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: ...
- 2015 Multi-University Training Contest 8 hdu 5385 The path
The path Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 5 ...
- 2015 Multi-University Training Contest 3 hdu 5324 Boring Class
Boring Class Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 2015 Multi-University Training Contest 3 hdu 5317 RGCDQ
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple
CRB and Apple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries
CRB and Queries Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- 2015 Multi-University Training Contest 6 hdu 5362 Just A String
Just A String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
随机推荐
- 三、Git 分支
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 1.分支简介 ...
- C/C++ 名正则言顺
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50532701 名称所表达的含义极其丰富 ...
- urlEncoder和urlDecoder的作用和使用
1.URLEncoder.encode(String s, String enc) 使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式 URLD ...
- C#一个托付的样例
C#中的函数能够被声明的一个托付所调用. 函数为静态方法.和托付声明的參数返回值要一致. class Program { delegate float MathOperationDelegate( ...
- Dalvik虚拟机垃圾收集(GC)过程分析
前面我们分析了Dalvik虚拟机堆的创建过程,以及Java对象在堆上的分配过程. 这些知识都是理解Dalvik虚拟机垃圾收集过程的基础.垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收.一 ...
- Oracle 后台进程介绍
一 进程分类: 1.服务器进程(server process): 依据客户请求完毕工作.如接收和处理应用发送的SQL语句 2.后台进程(background process): 随数据库而启动,用于完 ...
- Partition(hdu4651)2013 Multi-University Training Contest 5----(整数拆分一)
Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- oracle 时间戳TIMESTAMP
//数据库 UPDATETIMESTAMP TIMESTAMP(6) //dto /** 更新时间戳 **/ private String updatetimestamp; //dao //插入操作 ...
- Java -- XML解析工具dom4j
前言 XML现已成为一种通用的数据交流方式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便,对于XML的解析有四种方式:DOM生成和解析XML文档,SAX生成和解析XML文件 ...
- js mudules.js
var InsertRow={ isMoveRow:false, // 是否存在动态移动行 curSelRowIndex:"", // 当前选中行序号 prevSelRowInde ...