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 ...
随机推荐
- html使用代码大全
<DIV style="FONT-SIZE: 9pt">1)贴图:<img src="图片地址">1)首行缩进2格:<p styl ...
- Apache Qpid CPP的编译与安装
单机Broker部署(windows/linux) 在Windows/Linux上部署QPID Broker的方法. Windows 需要预先准备的文件和程序 qpid-cpp-0.32.tar.gz ...
- Entity Framework 6 Code First 实践系列(1):实体类配置-根据依赖配置关系和关联
EF实体类的配置可以使用数据注释或Fluent API两种方式配置,Fluent API配置的关键在于搞清实体类的依赖关系,按此方法配置,快速高效合理.为了方便理解,我们使用简化的实体A和B以及A.B ...
- 两个月刷完Leetcode前400题经验总结
更新:气死了,挂个傻逼: 每次做个分享.组织个活动,就会有一些傻逼冒泡生怕别人不知道他是傻逼,气死我了!自己好好看看非法集资的概念,我办这个活动,一分钱都没收,入群99元是督促大家完成刷题任务,最后完 ...
- bash shell最基本的语法
1 shell语句的基本构成 shell每个基本的构成元素之间都相隔一个空格. 比如[ -e file ],[.-e.file.]这四个基本元素之间都相隔了一个空格. 同样的道理[ ! -e file ...
- JS中的存储机制
一.堆和栈的介绍 1.堆和队,是先进先出:栈,是先进后出,就跟水桶差不多: 2.存储速度:堆和队的存储速度较慢,栈的存储速度较快,会自动释放: 二.js中存储的类型 1.堆,一般用于复杂数据类型,存储 ...
- POJ1077 Eight —— IDA*算法
主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:像BFS那样,把棋盘数组放在结构体中. #include <iostream&g ...
- SQL Server 数据库备份策略,第一周运行失败的原因
一般生产库,采用 每10分钟备份Log,每天备份Diff,每周备份Full的策略. 同时存在异地备份.异地备份可使用SQL Server本身的cmdshell存储过程,调用系统命令. 在为新数据库,建 ...
- YTU 2209: 建立链表(线性表)
2209: 建立链表(线性表) 时间限制: 1 Sec 内存限制: 128 MB 提交: 282 解决: 185 题目描述 (线性表)设键盘输入n个英语单词,输入格式为n, w1, w2, -,w ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...