UVa 1218 Perfect Service 完美的服务
***状态设计值得一看
dp[u][0]表示u是服务器(以下v均指任意u的子结点,son指u的所有子结点)
ap[u][0]=sum{dp[v][1]}+1//错误,服务器是可以和其他服务器相邻的
dp[u][0]=sum{min(dp[v][0],dp[v][1])}+1
dp[u][1]表示u不是服务器,但是父亲是,显然子结点不是
dp[u][1]=sum{dp[v][2]}
dp[u][2]表示u和父亲都不是服务器,但自身有一个子结点是
此情况-1表示不可能满足
***dp[u][2]=min{dp[v][0]}//错误,别犯傻,怎么能忽略其他子结点需要的服务器
dp[u][2]=min{dp[v][0]+sum{dp[x][2]}}(x∈son-i)
=sum{dp[v][2]}-max{dp[v][2]-dp[v][0]}
=dp[u][1]+min{dp[v][0]-dp[v][2]}
(以上"表示..."均指"表示...的情况总数")
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[][];
bool vis[];
//int vis2[20010];
struct Edge
{
int to,next;
}edge[];
int num_edge,n,first[];
//void dfs(int x)
//{
// int k=first[x];
// while(k!=0)
// {
// if(vis2[k]==0)
// {
// vis2[k]=1;
// vis2[edge[k].p]=-1;
// dfs(edge[k].to);
// }
// k=edge[k].next;
// }
//}
void dfs2(int u)
{
vis[u]=true;
dp[u][]=;
dp[u][]=;
int k=first[u],v;
while(k!=)
{
v=edge[k].to;
if(!vis[v])
{
dfs2(v);
dp[u][]+=min(dp[v][],dp[v][]);
dp[u][]+=dp[v][];
dp[u][]=min(dp[u][],dp[v][]-dp[v][]);
}
k=edge[k].next;
}
dp[u][]+=dp[u][];
}
//void print(int x)
//{
// printf("%d ",x);
// int k=first[x];
// while(k!=0)
// {
// if(vis2[k]==1)
// {
// print(edge[k].to);
// }
// k=edge[k].next;
// }
//}
int main()
{
int t,i,a,b;
while(n!=-)
{
scanf("%d",&n);
num_edge=;
memset(vis,,sizeof(vis));
memset(first,,sizeof(first));
memset(dp,0x01,sizeof(dp));
for(i=;i<n;i++)
{
scanf("%d%d",&a,&b);
edge[++num_edge].to=b;
edge[num_edge].next=first[a];
first[a]=num_edge;
//edge[num_edge].p=num_edge+1;
edge[++num_edge].to=a;
edge[num_edge].next=first[b];
first[b]=num_edge;
//edge[num_edge].p=num_edge-1;
}
//dfs(1);
//print(1);
dfs2();
// t=min(dp[1][0],dp[1][1]);
// if(dp[1][2]!=-1)//不需要给dp[][2]加负一的特判,只需要保持在不可能时把值设为非常大的值(Maxn)即可
// t=min(t,dp[1][2]);//错的,根结点不能为自己和父亲都是服务器,因为没有父亲
printf("%d\n",min(dp[][],dp[][]));
scanf("%d",&n);
}
return ;
}
UVa 1218 Perfect Service 完美的服务的更多相关文章
- UVA - 1218 Perfect Service(树形dp)
		
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
 - UVa 1218 - Perfect Service
		
/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器 ...
 - UVa 1218 - Perfect Service(树形DP)
		
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
 - UVA - 1218 Perfect Service (树形DP)
		
思路:dp[i][0]表示i是服务器:dp[i][1]表示i不是服务器,但它的父节点是服务器:dp[i][2]表示i和他的父亲都不是服务器. 转移方程: d[u][0] += min(d[ ...
 - UVA - 1218 Perfect Service (树形dp)(inf相加溢出)
		
题目链接 题意:给你一个树形图,让你把其中若干个结点染成黑色,其余的染成白色,使得任意一个白色结点都恰好与一个黑色结点相邻. 解法比较容易,和树上的最大独立集类似,取一个结点作为树根,对每个结点分三种 ...
 - Perfect Service [POJ 3398]
		
Perfect Service 描述 网络由N个通过N-1个通信链路连接的计算机组成,使得任何两台计算机可以通过独特的路由进行通信.如果两台计算机之间存在通信链路,则称这两台计算机是相邻的.计算机的邻 ...
 - Web Service实现分布式服务的基本原理
		
简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Se ...
 - Android(java)学习笔记227:服务(service)之服务的生命周期 与 两种启动服务的区别
		
1.之前我们在Android(java)学习笔记171:Service生命周期 (2015-08-18 10:56)说明过,可以回头看看: 2.Service 的两种启动方法和区别: (1)Servi ...
 - angularjs factory,service,provider 自定义服务的不同
		
angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angul ...
 
随机推荐
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
			
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
 - linux shell 突破
			
targetDate=$(cat maxdayid); targartMonth=${targetDate::}; targartYear=${targetDate::}; echo $targart ...
 - HBase运维和优化
			
管理工具 HBase ShellHBase Shell是HBase组件提供的基于JRuby IRB的字符界面的交互式客户端程序,通过HBase Shell可以实现对HBase的绝大部分操作 通过hel ...
 - 对 block 内存管理的一些看法
			
首先交代一下retain cycle ,和 产生retain cycle后我们应该怎么处理. 1.retain cycle在block中是极易产生,block就是一段可以灵活使用的代码,你可以把它当做 ...
 - RTC脚本模型课堂 - ShowMessage(Star5的博客)
			
ShowMessage对delphi开发人员而言,是个非常熟悉的玩意,常常需要在软件上做一些合适的提醒,以达到更好的用户体验.今天我们来介绍一下网站里的提示框,也就是JavaSciprt中的alert ...
 - (linux)likely和unlikely函数
			
在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解. 1.对 ...
 - POJ3080 Blue Jeans  —— 暴力枚举 + KMP / strstr()
			
题目链接:https://vjudge.net/problem/POJ-3080 Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total ...
 - HDU2181 哈密顿绕行世界问题 —— DFS
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...
 - web开发中的mysql使用
			
一.单机mysql与mysql集群 1. 单机mysql很好理解,在一台物理机上安装好mysql服务端程序,使用这一台机器的硬件(cpu,内存,硬盘)进行数据的处理. 2.mysql集群 MySQL集 ...
 - 2014山东省“浪潮杯”第五届ACM省赛总结
			
一次比赛做一次总结,弱菜又来总结了…… 我这种大四的又死皮赖来混省赛了,貌似就我和山大威海的某哥们(不详其大名)了吧.颁奖前和他聊天,得知他去百度了,真是不错,ORZ之. 比赛流水账: 题目目前不知道 ...