Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

我们机房中了病毒,因此几乎什么都无法正常进入。为了解决这个病毒,我们花了好几天。终于在大家的共同努力下,病毒不再猖狂了。

我们的机房的所有计算机组成了一棵树,这是由于病毒,计算机无法两两完全连通的结果。所以,每台计算机能够直接连通的是

它的孩子计算机和父亲计算机。话说某天晚上,我们发现病毒绝迹了,但是我们无法确认是否真的消灭干净了。因此我们需要派

一些同学牺牲上课时间看守住所有的电脑两个小时,以确认没有任何病毒痕迹才能放心。我们当然想少耽误同学们的学习时间。

因此我们需要找出一种方案,使所需要的看守人员最少。直接连通的两台计算机只需要一个人即可看守住。

【输入格式】

输入文件中数据表示一棵树,描述如下:

第一行 N,表示树中结点的数目。

从第二行开始,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边与结点I相连),接下来k个数,分别是每条边的

另一个结点标号r1,r2,…,rk。

对于一个n(1 < n <= 1500)个结点的树,结点标号在0到n-1之间,在输入文件中每条边只出现一次。

【输出格式】

输出数据只有一行,表示至少需要耽误多少学生的学习时间。

【数据规模】

对于 100% 的数据,保证n≤1500。

Sample Input1

4

0 1 1

1 2 2 3

2 0

3 0

Sample Output1

1

【样例说明】

将一名同学放在1号位置即可看守住所有的计算机。

【题解】



设f1[x]表示x这个节点要放人并且x与它的子树都已经被控制了;

设f2[x]表示x这个节点不放人并且x与它的子树都已经被控制了;

设f3[x]表示x这个节点没有被控制,但是x的子树都被控制了;

以上f都表示所需要的最小人数;

这题的根节点是确定的->1号节点;



【代码】

#include <cstdio>
#include <algorithm>
#include <vector> const int MAXN = 1500 + 10; using namespace std; int n, f1[MAXN] = { 0 }, f2[MAXN] = { 0 }, f3[MAXN] = { 0 };
vector <int> a[MAXN]; void tree_dp(int x, int fa)
{
bool judge = false;
int len = a[x].size();
int aa = MAXN;
for (int i = 0; i <= len - 1; i++)
{
int y = a[x][i];
if (y == fa)
continue;
tree_dp(y, x);
f1[x] += min(f1[y], min(f2[y], f3[y]));//因为这个节点已经确定要放一个了,所以它的
//儿子是什么状态都无所谓;
f3[x] += f2[y];//f3是x没有被控制,f2[y]则表示y没有人监控。这正好对应了。直接转移;
if (f1[y] <= f2[y])//接下来要转移f2的状态
judge = true;//因为f2[x]是x这个点不放人监控但是被儿子监控了。
//所以如果一个节点x,它的所有儿子都没人在监控(即全都选择了f2状态).
//那么这节点x就不符合f2的状态了。
f2[x] += min(f1[y], f2[y]);
aa = min(aa, f1[y] - f2[y]);
//为了防止这种情况出现。我们要在它的儿子节点中找一个最优的点来监控这个x;
}
if (!judge) //如果儿子全都选择f2状态则要加一个最优的儿子节点监控它。
f2[x] += aa;
f1[x]++;//因为放了一个节点所以递增;
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int x, num, y;
scanf("%d%d", &x, &num);
x++;
for (int j = 1; j <= num; j++)
{
scanf("%d", &y);
y++;
a[x].push_back(y);
a[y].push_back(x);
}
}
tree_dp(1, 0);
printf("%d\n", min(f1[1], f2[1]));//最后取根节点放或不放的最优值
return 0;
}

【u245】机房病毒的更多相关文章

  1. ARP欺骗病毒,网页“篡改”,注入iframe代码!

    ---------------权威资料看这里--------------- 清华大学信息网络工程研究中心-中国教育和科研计算机网应急响应组<ARP 欺骗网页劫持攻击分析>PDF文件,直接I ...

  2. 技术分析 | 新型勒索病毒Petya如何对你的文件进行加密

    6月27日晚间,一波大规模勒索蠕虫病毒攻击重新席卷全球. 媒体报道,欧洲.俄罗斯等多国政府.银行.电力系统.通讯系统.企业以及机场都不同程度的受到了影响. 阿里云安全团队第一时间拿到病毒样本,并进行了 ...

  3. C语言-郝斌笔记-002病毒程序示范

    病毒程序示范 /* 龌龊的程序! */ # include <stdio.h> # include <windows.h> # include <malloc.h> ...

  4. COGS 449. 网络病毒

    ★★   输入文件:virus.in   输出文件:virus.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 公元2008年10月31日星期五,笃志者所在的整个机房由 ...

  5. bzoj 3779: 重组病毒 LCT+线段树+倍增

    题目: 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策划了一次实验,来研究这种病毒. 实验在一个封闭 ...

  6. arp病毒系列——攻击类型

       到目前为止,我所见闻的arp病毒攻击导致局域网几乎瘫痪的事例已经不下3次了,而且非常巧的​是:每次都是将近学校考试.大批同学新下四楼更新IP-Mac的时候出现!严重的时候你根本就ping不通网关 ...

  7. 5行代码!完成bat病毒制作!!!

    这个病毒的功能是删除当前目录下.cpp类型的代码. copy %0 "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\P ...

  8. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  9. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

随机推荐

  1. ubuntu-查看iso文件的md5

    直接使用命令md5sum +文件名就可以了.例如 md5sum ~/YLMF_GHOSTWIN7SP1_X86_YN2015.iso 执行结果如下 cdbb7fdc8bbc30e5e0a398f71b ...

  2. stm32与arm7比较(经典)

    http://wenku.baidu.com/link?url=LIVcT1AQL0IgVF1xan5Zy9rXarCBo66hj7OXSxM1ap7FpssO4c3sd1pZd8azfBPr3PBy ...

  3. SQL2012的新分页方法

    SELECT BusinessEntityID , FirstName , LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET ( ...

  4. Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法

    ●  BASE64 严格地说,属于编码格式,而非加密算法    ●  MD5(Message Digest algorithm 5,信息摘要算法)    ●  SHA(Secure Hash Algo ...

  5. POJ 1320 Street Numbers Pell方程

    http://poj.org/problem?id=1320 题意很简单,有序列 1,2,3...(a-1),a,(a+1)...b  要使以a为分界的 前缀和 和 后缀和 相等 求a,b 因为序列很 ...

  6. 【2017 Multi-University Training Contest - Team 6】Inversion

    [链接]h在这里写链接 [题意] 给出一个序列,求2~n每一个数,下标不是这个数倍数的最大值是什么? [题解] 把a数组从大到小排序. 每个位置i,逆序枚举b数组,找到第一个对应下标不是i的倍数的,直 ...

  7. unity3d 改动gui label颜色,定义颜色需除以256

    GUIStyle titleStyle2 = new GUIStyle(); titleStyle2.fontSize = 20; titleStyle2.normal.textColor = new ...

  8. 原生js大总结五

    041.在js中如何用方法将10进制的字符转换成16进制和8进制   数字.toString(16) 数字.toString(8)     042.如何创建时间对象   new Date()   04 ...

  9. HTTP网络协议(五)

    主动攻击:是指攻击通过直接访问Web应用,把攻击代码传入的攻击模式,该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源,例如:SQL注入攻击和OS命令注入攻击.  被动攻击:是指 ...

  10. 在Java中,return null 是否安全, 为什么?

    Java代码中return value 为null 是不是在任何情况下都可以,为什么不会throw NullPointerException? Java语言层面:null值自身是不会引起任何问题的.它 ...