1.读入图,边是双向的

2.递归建树,同时确定每一层的节点

3.dfs按层搜索,先把这一层所有被传染的(die[pa[k]]=true的)的die置为true

然后循环,每次把一个die为true的变为false,表示断开这条边,继续dfs

dfs的最后记得把这一层die的全部置为false(查了一下午...)

退出条件:now当前死的人>=ans, f当前层>layerNum,num这一层死的人==0

代码:

#include<iostream>
#define Size 305
#define INF 10000000
using namespace std; int n;
int g[Size][Size];
int layer[Size][Size];
int pa[Size];
bool vis[Size];
bool die[Size];
int ans=INF;
int layerNum=;
int way[Size]; void buildTree(int k,int f){
vis[k]=true;
layer[f][++layer[f][]]=k;
if(f>layerNum)layerNum=f; for(int i=;i<=g[k][];i++){
int s=g[k][i];
if(!vis[s]){
pa[s]=k;
buildTree(s,f+);
}
}
} void dfs(int f,int now){//f:layer
if(now>=ans)return;
if(f>layerNum){
ans=min(now,ans);
/*cout<<ans<<": ";
for(int i=1;i<=layerNum;i++)cout<<way[i]<<' ';
cout<<endl;*/
return;
}
int num=;
for(int i=;i<=layer[f][];i++){
int k=layer[f][i];
if(die[pa[k]])die[k]=true,num++;
}
if(num==){
ans=min(now,ans);
return;
}
for(int i=;i<=layer[f][];i++){
int k=layer[f][i];
if(die[k]){
way[f]=k;
die[k]=false;
dfs(f+,now+num-);
die[k]=true;
}
}
for(int i=;i<=layer[f][];i++){//退出之前清零当前层的die
die[layer[f][i]]=false;
}
} int main(){
freopen("1091.in","r",stdin); int p,a,b;
cin>>n>>p;
for(int i=;i<=p;i++){
cin>>a>>b;
g[a][++g[a][]]=b;
g[b][++g[b][]]=a;
}
buildTree(,);
/*for(int i=1;i<=layerNum;i++){
for(int j=1;j<=layer[i][0];j++)
cout<<layer[i][j]<<' ';
cout<<endl;
}*/
die[]=true;
dfs(,);
cout<<ans<<endl; fclose(stdin);
return ;
}

code1091 传染病控制的更多相关文章

  1. NOIP2003 传染病控制

    题四     传染病控制 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完 全认 ...

  2. P1041 传染病控制(dfs)

    P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...

  3. [COGS 0107][NOIP 2003] 传染病控制

    107. [NOIP2003] 传染病控制 ★★★   输入文件:epidemic.in   输出文件:epidemic.out   简单对比时间限制:1 s   内存限制:128 MB [问题背景] ...

  4. AC日记——传染病控制 洛谷 P1041

    传染病控制 思路: 题目想问的是: 有一棵树: 对于除1外每个深度可以剪掉一棵子树: 问最后剩下多少节点: 题目意思一简单,这个题立马就变水了: 搜索就能ac: 数据有为链的情况,按深度为层次搜索的话 ...

  5. 【搜索】P1041 传染病控制

    题目链接:P1041 传染病控制 题解: 这个题目是看别人的博客做出来的,其实挺不错的一个题目,考察的东西挺多的, 一个dfs可以处理5个东西: 1.找出父亲 2.找出深度 3.每一层的节点,存进Ve ...

  6. Luogu P1041 [2003NOIP提高组]传染病控制

    P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...

  7. 洛谷 P1041 传染病控制

    P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...

  8. [NOIP2003] 传染病控制题解

    问题 F: [NOIP2003] 传染病控制 时间限制: 1 Sec  内存限制: 128 MB 题目描述 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范 ...

  9. P1041 传染病控制——暴力遍历所有相同深度的节点

    P1041 传染病控制 说实话这种暴力我还是头一次见,每次病毒都会往下传染一层: 数据范围小,我们可以直接枚举当前层保护谁就好了: 用vector 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...

随机推荐

  1. struts2学习(3)struts2核心知识II

    一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...

  2. [转][c#]注册表经验集

    在 win7 64位的系统中,为了将程序做成绿化版(单EXE文件),一些设置准备放到 regedit(注册表)中. 测试时发现网上的 demo 可以读,但写的值调试不报错,相应位置却不存在,困扰了许久 ...

  3. zookeeper基本讲解(Java版,真心不错)

    1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核 ...

  4. ngui自适应

    增加UIROOT using UnityEngine; namespace Com.Xyz.UI { [ExecuteInEditMode] [RequireComponent(typeof(UIRo ...

  5. JS-基础2

    JS基本语法   1.学习javascript的目的? A.增强网页的动态效果. B.改变网页中的元素(能够直接对网页中的元素进行操作). C.加强同后台的数据交互.页面的数据验证. 2.JS在web ...

  6. 23_java之IO操作

    01输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操 ...

  7. php502故障处理

    一次打开网站,发现502,第一反应肯定是php-fpm没启动,尝试启动还是502. 1.首先查询Nginx日志发现如下连接PHP失败: 2016/07/29 15:56:04 [error] 2376 ...

  8. python查找文件相同的和包含汉字的

    #!/usr/bin/env python # Version = 3.5.2 import os import time d_path = '/data/media' log_file = 'res ...

  9. python 监控windows磁盘空间和备份大小

    #!/usr/bin/env python # Version = 3.5.2 # __auth__ = '无名小妖' import os import time import sendmail im ...

  10. $.getJSON() 回调函数没有执行的原因

    $.getJSON() 方法使用 AJAX 的 HTTP GET 请求获取 JSON 数据. 语法 $.getJSON(url,data,success(data,status,xhr)) url必填 ...