题目链接

题意:给你一个树形图,让你把其中若干个结点染成黑色,其余的染成白色,使得任意一个白色结点都恰好与一个黑色结点相邻。

解法比较容易,和树上的最大独立集类似,取一个结点作为树根,对每个结点分三种情况讨论即可:自己是黑色,自己是白色而父亲是黑色,自己和父亲都是白色。

但关键在于这道题如果用inf来作为不合法状态的dp值的话,会导致在dp的过程中有多个inf相加而炸掉!!习惯把inf设成0x3f3f3f3f或者0x7fffffff的选手们要杯具了。

解决方法有很多,比如把inf设小一点,把int改成longlong等等都可以。比较保险的方法是在运算的过程中如果超过inf就立即改成inf,这样只要保证两个inf相加不会溢出就行了,这时候0x3f3f3f3f的好处就体现出来了,两个0x3f3f3f3f相加之后仍不超过int上限。

这是我第一次爆inf的经历,为什么其他的题都不爆inf,偏偏在这道题上爆了呢?我也想不出一个比较中肯的解释,大概是inf的存在就是为了简化判断,而本身没什么实际意义吧,因此会出现不可预料的结果应该也是正常的,引以为戒。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+,inf=0x3f3f3f3f;
struct E {int v,nxt;} e[N<<];
int n,d[N][],hd[N],ne;
void addedge(int u,int v) {e[ne]= {v,hd[u]},hd[u]=ne++;}
void dp(int u,int fa) {
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v;
if(v==fa)continue;
dp(v,u);
}
d[u][]=,d[u][]=,d[u][]=inf;
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v;
if(v==fa)continue;
d[u][]+=min(d[v][],d[v][]);
d[u][]=min(d[u][],inf);
}
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v;
if(v==fa)continue;
d[u][]+=d[v][];
d[u][]=min(d[u][],inf);
}
for(int i=hd[u]; ~i; i=e[i].nxt) {
int v=e[i].v;
if(v==fa)continue;
d[u][]=min(d[u][],d[u][]+d[v][]-d[v][]);
d[u][]=min(d[u][],inf);
}
} int main() {
while(scanf("%d",&n)==) {
memset(hd,-,sizeof hd),ne=;
for(int i=; i<n; ++i) {
int u,v;
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
dp(,-);
printf("%d\n",min(d[][],d[][]));
int ff;
scanf("%d",&ff);
if(ff==-)break;
}
return ;
}

UVA - 1218 Perfect Service (树形dp)(inf相加溢出)的更多相关文章

  1. UVA - 1218 Perfect Service(树形dp)

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  2. UVa 1218 - Perfect Service

    /*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...

  3. UVA - 1218 Perfect Service (树形DP)

    思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器.       转移方程: d[u][0] += min(d[ ...

  4. UVa 1218 - Perfect Service(树形DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVa 1218 Perfect Service 完美的服务

    ***状态设计值得一看dp[u][0]表示u是服务器(以下v均指任意u的子结点,son指u的所有子结点)ap[u][0]=sum{dp[v][1]}+1//错误,服务器是可以和其他服务器相邻的dp[u ...

  6. POJ3398Perfect Service[树形DP 树的最大独立集变形]

    Perfect Service Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1518   Accepted: 733 De ...

  7. UVa 10859 - Placing Lampposts 树形DP 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  8. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  9. UVa 12093 Protecting Zonk (树形DP)

    题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相连 ...

随机推荐

  1. SQL SERVER 存储/ 存储结构 内部数据结构

      资料: http://www.cnblogs.com/woodytu/p/4488930.html

  2. PHP基本语法,类基本函数

    C#中函数四要素返回类型,函数名,参数列表,函数体pulic void show()php函数定义1.最简单的定义function show(){echo "hello"}show ...

  3. 每天一个Linux命令(42)watch命令

        watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示.     (1)用法:     用法:  watch  [参数]  [命令]       (2)功能:     功能:  可 ...

  4. css小技巧1

    资料 1. 文本省略 单行省略: white-space:nowrap; overflow:hidden; text-overflow:ellipsis; 多行文本省略: 只兼容webkit内核,不属 ...

  5. git 使用教程 --基础一

    第一步:下载git   https://git-scm.com/ 第二步: 切到需要保存的文件夹下,执行: bogon:VBV mona$ git init #初始化,表示即将对当前文件夹进行版本控制 ...

  6. 20145231《Java程序设计》第二次实验报告

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD: 理解并掌握面向对象三要素: 初步掌握UML建模: 熟悉S.O.L.I.D原则: 了解设计模式: 实验要求 实现并体会例子中代码的 ...

  7. Windows 2012 系统汉化

    远程登录服务器 控制面板,选择“语言” (Windows 2012 自带的语言包 ) 此处需要等待 安装完成,选择中文 重启后 应该就不需要做其他的操作了

  8. jQuery 获取jsp页面中用iframe引入的jsp页面中的值

    <iframe scrolling="no" src="<c:url value='/unitBaseperson/view.do?para=9&op ...

  9. dp2--合并石子(一)

    dp2--合并石子(一) 一.心得 二.题目 石子合并(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     有N堆石子排成一排,每堆石子有一定的数量.现要将 ...

  10. ActiveMq 高级特性的使用

    消费者的 destination 可以使用 wildcards 生产者的 destination 可以使用 composite destinations VirtualTopic 真是一大利器,当初读 ...