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 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...
随机推荐
- apktool重新打包错误
E:\apktool-install-windows-r05-ibot\apktool-install-windows-r05-ibot\.\test_apk_name\res\layout-larg ...
- jmeter线程组 讲解
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
- Go - reflection
Go 语言也有反射的机制,通过这种机制可以大大提高程序的灵活性. reflect包中的 TypeOf 与 ValueOf 方法 首先,当我们想要使用反射技术的时候,我们需要先引用 reflect 包. ...
- 第七章 HTTP流量管理(一) gateway
Gateway: istio的一种资源类型,Istio Gateway告诉k8s的istio-ingressgateway pods可以打开哪些主机和端口(如下的80是 ingressgateway ...
- 【UVA】10391 Compound Words(STL map)
题目 题目 分析 自认已经很简洁了,虽说牺牲了一些效率 代码 #include <bits/stdc++.h> using namespace std; set <s ...
- j2EE框架collection
在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结 ...
- 微信浏览器清缓存、cookie等
微信浏览器访问:http://debugx5.qq.com
- Tkinter grid() 方法
Tkinter grid() 方法:这个的几何管理器组织在父部件的表状结构中的部件. 这的几何管理器组织表状结构中的小部件的父部件. 语法: widget.grid( grid_optio ...
- MonkeyScript测试命令集合
MonkeyScript:(不支持截屏) 可以被Monkey识别的集合命令 可以完成重复固定的操作 MonkeyRunner(支持截屏操作) 提供一系列API,可以完成模拟事件和截屏操作 Mo ...