洛谷P1041 传染病控制

解:搜索......
我们可以每次选择分支少的搜索,或者说,贪心的搜索当前更优的决策。
每一层把能剪的点搞出来,按照度数/SIZ排序,然后依次搜索。加个最优化剪枝就完事了。
#include <bits/stdc++.h>
const int N = , INF = 0x3f3f3f3f;
struct Edge {
int nex, v;
}edge[N << ]; int tp;
int e[N], siz[N], in[N], n, ans = INF;
int v[N][N];
bool del[N], vis[N];
inline bool cmp(const int &a, const int &b) {
//return in[a] > in[b];
return siz[a] > siz[b];
}
inline void add(int x, int y) {
tp++;
edge[tp].v = y;
edge[tp].nex = e[x];
e[x] = tp;
return;
}
void DFS_1(int x, int f) {
siz[x] = ;
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(y == f) continue;
DFS_1(y, x);
siz[x] += siz[y];
}
return;
}
void DFS(int k, int d) {
if(k >= ans) return;
v[d][] = ;
for(int x = ; x <= n; x++) {
if(del[x] || !vis[x]) continue;
/// vis[x]
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(vis[y] || del[y]) continue;
v[d][++v[d][]] = y;
}
}
if(!v[d][]) {
ans = std::min(ans, k);
return;
}
std::sort(v[d] + , v[d] + v[d][] + , cmp);
for(int i = ; i <= v[d][]; i++) {
vis[v[d][i]] = ;
}
k += v[d][] - ;
for(int i = ; i <= v[d][]; i++) {
int x = v[d][i];
del[x] = ;
vis[x] = ;
DFS(k, d + );
vis[x] = ;
del[x] = ;
}
for(int i = ; i <= v[d][]; i++) {
vis[v[d][i]] = ;
}
return;
}
int main() {
// freopen("disease.in", "r", stdin);
// freopen("disease.out", "w", stdout);
int m;
scanf("%d%d", &n, &m);
for(int i = , x, y; i <= m; i++) {
scanf("%d%d", &x, &y);
add(x, y); add(y, x);
in[x]++; in[y]++;
}
DFS_1(, );
vis[] = ;
DFS(, );
printf("%d\n", ans);
return ;
}
AC代码
洛谷P1041 传染病控制的更多相关文章
- 洛谷 P1041 传染病控制
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- [NOIP2003] 提高组 洛谷P1041 传染病控制
题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...
- 洛谷—— P1041 传染病控制
https://www.luogu.org/problem/show?pid=1041 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜 ...
- 洛谷 P1041 错解
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- AC日记——传染病控制 洛谷 P1041
传染病控制 思路: 题目想问的是: 有一棵树: 对于除1外每个深度可以剪掉一棵子树: 问最后剩下多少节点: 题目意思一简单,这个题立马就变水了: 搜索就能ac: 数据有为链的情况,按深度为层次搜索的话 ...
- 【noip】跟着洛谷刷noip题
传送门 1.铺地毯 d1t1 模拟 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> # ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
随机推荐
- js实现input的赋值
input框赋值如下所示,是一个文本框的html代码,实际开发中,要涉及到将数据库中的数据取出然后放入input框中. <input id="name1" name=&quo ...
- null值经过强转会怎样?
null还是null,类型不会改变的,也不会报错!
- python读文件指定行的数据
import linecacheprint linecache.getline('url.txt',2) 读取url.txt文件的第2行内容
- docker学习笔记二
知识点: 1)手动构建镜像 2)Dockerfile快速构建镜像 阿里云yum源https://opsx.alibaba.com/mirror 镜像制作nginx镜像实例 创建并运行centos容器 ...
- peewee 事物 回滚
peewee 事物 回滚 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLDatabase(host='123. ...
- delphi中如何实现DBGrid中的两列数据想减并存入另一列
可参考下面的例子: 数据自动计算的实现:“金额”是由“单价”和“工程量”相乘直接得来的,勿需人工输入. 这可在“数据源构件”的onupdatedata例程添加如下代码实现: procedure T ...
- 1064 - You have an error in your SQL syntax;
mysql 1064 错误: SQL语法错误,check the manual that corresponds to your MySQL server version for the right ...
- react用构造函数创建组件
有两种方法,一种是通过构造函数创建,一种是通过class创建 1.构造函数创建组件 用function+组件名的方式创建,创建好了,在render里面以标签的形式一丢就可以啦!但是这种方式必须要ret ...
- initial
摘自http://blog.csdn.net/liming0931/article/details/7039680 首先说说结构化过程语句,在verilog中有两种结构化的过程语句:initial语句 ...
- Nginx stream如何获取ssl信息并反向代理至上游服务器
L:116