P1041 传染病控制——暴力遍历所有相同深度的节点
P1041 传染病控制
说实话这种暴力我还是头一次见,每次病毒都会往下传染一层;
数据范围小,我们可以直接枚举当前层保护谁就好了;
用vector 记录相同层数的节点;维护已经断了的点;
如果超出最底层或者都已经被保护就更新答案;
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=;
vector<int> v[maxn];
int pre[maxn],last[maxn],other[maxn],l; void add(int x,int y)
{
l++;
pre[l]=last[x];
last[x]=l;
other[l]=y;
} int n,m; int siz[maxn],dep[maxn]; int father[maxn]; int madep;
void dfs1(int x,int fa)
{
siz[x]=;
dep[x]=dep[fa]+;
father[x]=fa;
madep=max(madep,dep[x]);
for(int p=last[x];p;p=pre[p])
{
int v=other[p];
if(v==fa) continue;
dfs1(v,x);
siz[x]+=siz[v];
}
} int vis[maxn]; int ans; void dfs(int x,int sum)
{
if(x==madep+)
{
ans=min(ans,sum);
return ;
}
bool flag=;
for(int i=;i<v[x].size();i++)
{
if(vis[father[v[x][i]]])//chosen not ill
{
vis[v[x][i]]=;
}
else {
vis[v[x][i]]=;
flag=;
}
}
if(!flag)
{
ans=min(ans,sum);
return ;
} for(int i=;i<v[x].size();i++)
{
int u=v[x][i];
if(vis[u]) continue;
vis[u]=;
dfs(x+,sum-siz[u]);
vis[u]=;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs1(,);
for(int i=;i<=n;i++)
{
v[dep[i]].push_back(i);
}
ans=n;
dfs(,n);
printf("%d",ans);
return ;
}
P1041 传染病控制——暴力遍历所有相同深度的节点的更多相关文章
- C++实现二叉树的基本操作:建立、遍历、计算深度、节点数、叶子数等
题意: 代码实现: #include<iostream> #include<queue> #include<stack> using namespace std; ...
- 【搜索】P1041 传染病控制
题目链接:P1041 传染病控制 题解: 这个题目是看别人的博客做出来的,其实挺不错的一个题目,考察的东西挺多的, 一个dfs可以处理5个东西: 1.找出父亲 2.找出深度 3.每一层的节点,存进Ve ...
- Luogu P1041 传染病控制(搜索)
P1041 传染病控制 题意 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这 ...
- P1041 传染病控制(dfs)
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- 洛谷 P1041 传染病控制
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- [luogu]P1041 传染病控制[dfs]
[luogu]P1041 传染病控制 ——!x^n+y^n=z^n 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的 ...
- P1041 传染病控制【暴搜】
P1041 传染病控制 提交 10.78k 通过 3.74k 时间限制 1.00s 内存限制 125.00MB 题目提供者CCF_NOI 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 ...
- 2.遍历XML即添加修改节点
1.xml <?xml version="1.0" encoding="utf-8" ?> <stories> <story ac ...
- java遍历树(深度遍历和广度遍历
java遍历树如现有以下一颗树:A B B1 B11 B2 B22 C C ...
随机推荐
- 监听EF执行的sql语句及状态
1.监听EF执行sql的方式 db.Database.Log += c => Console.WriteLine($"sql:{c}"); SQL Server Profil ...
- java之struts2的ThreadLocal和ActionContext
在之前的学习中,我们知道struts2可以将表单中的数据自动设置到处理类的属性上,还有类型转换等其他功能.那么struts2是怎样做这件事情的呢? struts2完成这些功能是通过拦截器来完成的,并且 ...
- oracel 查询语句
1.以左边为显示表,从其他表查询关联的数据(多表查询) select a.*,b.name from da as a left join db as b on a.id = b.pid left jo ...
- 【SP1811】 LCS - Longest Common Substring(后缀自动机)
题目链接 对第一个串建出\(SAM\),然后用第二个串去匹配. 如果能往下走就往下走,不能的话就跳parent tree的父亲,直到能走为止.如果跳到\(0\)了还是不能走,重新匹配. #includ ...
- 能够提高PHP的性能的一些注意事项
1. 如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍.(静态类调用属性和方法,只可以调用静态属性和方法.self::方法名().self::属性名.只有实例化 ...
- Vue使用QRCode.js生成二维码
1.安装qrcode npm install qrcode 2.组件中引入qrcode import QRCode from 'qrcode' 3.html代码 <div><span ...
- 浅谈javascript中的递归和闭包
递归和闭包作为js中很重要的一环,几乎在前端的面试中都会涉及,特别闭包.今天前端组的组长冷不丁的问了我一下,粗略的回答了一下,感觉不太满足,于是重新学习了一下,写下本篇. 在说这个两个概念之前,我们先 ...
- HTTP缓存字段总结
首部 通用首部:有些首部提供了与报文相关的最基本的信息,它们被称为通用首部. 请求首部:请求首部是只在请求报文中有意义的首部. 响应首部 实体首部: 用来描述HTTP报文的负荷,由于请求和响应报文中都 ...
- SELinux 权限设置
SELinux 权限设置 一.SELinux简介 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GP ...
- Qt命名规范
1) 类名:单词首字母大写,单词和单词之间直接连接,无需连接字符 如: MyClass,QPushButton class MainWindow { }; 2) 函数名字,变量名:第二个单词开始(不是 ...