code1091 传染病控制
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 传染病控制的更多相关文章
- NOIP2003 传染病控制
题四 传染病控制 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完 全认 ...
- P1041 传染病控制(dfs)
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- [COGS 0107][NOIP 2003] 传染病控制
107. [NOIP2003] 传染病控制 ★★★ 输入文件:epidemic.in 输出文件:epidemic.out 简单对比时间限制:1 s 内存限制:128 MB [问题背景] ...
- AC日记——传染病控制 洛谷 P1041
传染病控制 思路: 题目想问的是: 有一棵树: 对于除1外每个深度可以剪掉一棵子树: 问最后剩下多少节点: 题目意思一简单,这个题立马就变水了: 搜索就能ac: 数据有为链的情况,按深度为层次搜索的话 ...
- 【搜索】P1041 传染病控制
题目链接:P1041 传染病控制 题解: 这个题目是看别人的博客做出来的,其实挺不错的一个题目,考察的东西挺多的, 一个dfs可以处理5个东西: 1.找出父亲 2.找出深度 3.每一层的节点,存进Ve ...
- Luogu P1041 [2003NOIP提高组]传染病控制
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- 洛谷 P1041 传染病控制
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- [NOIP2003] 传染病控制题解
问题 F: [NOIP2003] 传染病控制 时间限制: 1 Sec 内存限制: 128 MB 题目描述 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范 ...
- P1041 传染病控制——暴力遍历所有相同深度的节点
P1041 传染病控制 说实话这种暴力我还是头一次见,每次病毒都会往下传染一层: 数据范围小,我们可以直接枚举当前层保护谁就好了: 用vector 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...
随机推荐
- struts2学习(3)struts2核心知识II
一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...
- [转][c#]注册表经验集
在 win7 64位的系统中,为了将程序做成绿化版(单EXE文件),一些设置准备放到 regedit(注册表)中. 测试时发现网上的 demo 可以读,但写的值调试不报错,相应位置却不存在,困扰了许久 ...
- zookeeper基本讲解(Java版,真心不错)
1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核 ...
- ngui自适应
增加UIROOT using UnityEngine; namespace Com.Xyz.UI { [ExecuteInEditMode] [RequireComponent(typeof(UIRo ...
- JS-基础2
JS基本语法 1.学习javascript的目的? A.增强网页的动态效果. B.改变网页中的元素(能够直接对网页中的元素进行操作). C.加强同后台的数据交互.页面的数据验证. 2.JS在web ...
- 23_java之IO操作
01输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操 ...
- php502故障处理
一次打开网站,发现502,第一反应肯定是php-fpm没启动,尝试启动还是502. 1.首先查询Nginx日志发现如下连接PHP失败: 2016/07/29 15:56:04 [error] 2376 ...
- python查找文件相同的和包含汉字的
#!/usr/bin/env python # Version = 3.5.2 import os import time d_path = '/data/media' log_file = 'res ...
- python 监控windows磁盘空间和备份大小
#!/usr/bin/env python # Version = 3.5.2 # __auth__ = '无名小妖' import os import time import sendmail im ...
- $.getJSON() 回调函数没有执行的原因
$.getJSON() 方法使用 AJAX 的 HTTP GET 请求获取 JSON 数据. 语法 $.getJSON(url,data,success(data,status,xhr)) url必填 ...