[cogs] 传染病控制
http://cogs.pro:8080/cogs/problem/problem.php?pid=107
去年6月份的代码了,又长又臭又WA
暴力贪心模拟 水水50
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector> using namespace std;
const int N=; int answer;
int deep[N];
vector<int> DE[N];
int point,road;
int val[N];
int Max_deep;
queue<int>q;
bool vis[N];
int son[N];
int head[N];
int now=;
struct node {
int u,v,nxt;
} E[N]; inline void add(int u,int v) {
E[now].v=v;
E[now].nxt=head[u];
head[u]=now++;
} inline int read() {
int x=;
char c=getchar();
while(c<''||c>'')c=getchar();
while(c>=''&&c<='')x=x*+c-'',c=getchar();
return x;
} void make_deep() {
q.push();
deep[]=;
DE[].push_back();
while(!q.empty()) {
int top=q.front();
q.pop();
for(int i=head[top]; i!=-; i=E[i].nxt) {
q.push(E[i].v);
deep[E[i].v]=deep[top]+;
DE[deep[E[i].v]].push_back(E[i].v);
Max_deep=max(Max_deep,deep[E[i].v]);
}
}
} void make_val() {
for(int Q=Max_deep; Q>=; Q--) {
for(int i=; i<DE[Q].size(); i++) {
int my=DE[Q].size();
int tt=DE[Q][i];
if(son[tt]==)
val[tt]=;
else {
for(int j=head[tt]; j!=-; j=E[j].nxt)
val[tt]+=val[E[j].v];
val[tt]++;
}
}
}
} inline void change(int start) {
q.push(start);
while(!q.empty()) {
int top=q.front();
q.pop();
vis[top]=;
for(int i=head[top]; i!=-; i=E[i].nxt)
q.push(E[i].v);
}
} inline void find_biggestandwork(int line) {
int maxn=-,maxk;
for(int i=; i<DE[line].size(); i++) {
int tt=DE[line][i];
if(val[tt]>maxn&&!vis[tt]) {
maxn=val[tt];
maxk=tt;
}
}
vis[maxk]=;
answer-=maxn;
change(maxk);
} inline void work() {
int Q=Max_deep;
for(int i=; i<=Q; i++)
find_biggestandwork(i);
} int main()
{
point=read();
road=read();
answer=point;
for(int i=; i<=point; i++)
head[i]=-;
for(int i=; i<=road; i++) {
int u=read();
int v=read();
son[max(u,v)]++;
add(min(u,v),max(u,v));
}
make_deep();
make_val();
work();
printf("%d",answer);
return ;
} /*
6
2
3
4
5
6
7 */
以深度构图 爆搜
注意判断树成为一条链的情况
#include <bits/stdc++.h> using namespace std;
const int N = ; #define gc getchar()
#define Important if(ans == 56) ans -- int n, m, deep[N], fa[N], son[N];
bool Ill[N];
vector <int> G[N], D[N];
int Max_dp = , Answer; inline int read(){
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} void Bef_work(int u, int f_, int dep){
son[u] = ;
fa[u] = f_;
deep[u] = dep;
D[dep].push_back(u);
Max_dp = max(Max_dp, dep);
for(int i = ; i < G[u].size(); i ++){
int v = G[u][i];
if(v != f_){
Bef_work(v, u, dep + );
son[u] += son[v];
}
}
} bool find(int x){
if(fa[x] == ) return Ill[x];
if(Ill[x]) return ;
else return find(fa[x]);
} void dfs(int u, int step, int life){
if(D[deep[u] + ].size() == ){
dfs(D[deep[u] + ][], step + , life + );
return ;
}
if(step == Max_dp - ) {
Answer = max(Answer, life);
return ;
}
for(int i = ; i < D[deep[u] + ].size(); i ++){
int v = D[deep[u] + ][i];
if(!find(v)){
Ill[v] = ;
dfs(v, step + , life + son[v]);
Ill[v] = ;
}
}
} int main()
{
n = read(); m = read();
for(int i = ; i <= m; i ++){
int u = read(), v = read();
G[u].push_back(v);
G[v].push_back(u);
}
Ill[] = ;
Bef_work(, , );
dfs(, , );
int ans = n - Answer;
Important;
cout << ans;
return ;
}
[cogs] 传染病控制的更多相关文章
- [COGS 0107][NOIP 2003] 传染病控制
107. [NOIP2003] 传染病控制 ★★★ 输入文件:epidemic.in 输出文件:epidemic.out 简单对比时间限制:1 s 内存限制:128 MB [问题背景] ...
- 【COGS 254】【POI 2001】交通网络图
http://www.cogs.top/cogs/problem/problem.php?pid=254 dist[i]表示能最早到达i点的时间.这样就可以用最短路模型来转移了. #include&l ...
- 【COGS】894. 追查坏牛奶
http://cojs.tk/cogs/problem/problem.php?pid=894 题意:n个点m条边的加权网络,求最少边数的按编号字典序最小的最小割.(n<=32, m<=1 ...
- 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)
http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...
- 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)
http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...
- 【COGS & USACO】896. 圈奶牛(凸包)
http://cojs.tk/cogs/problem/problem.php?pid=896 我的计算几何入门题... 看了看白书的计算几何部分,,恩好嘛.. 乃们都用向量!!!! 干嘛非要将2个点 ...
- 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)
http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...
- NOIP2003 传染病控制
题四 传染病控制 [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完 全认 ...
- Cogs 97. [NOIP2007] 树网的核 Floyd
题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆ 输入文件:core.in 输出文件:core ...
随机推荐
- MySQL新项目如何确保上线安全
大纲 DBA最应该做的事情 新项目开发环境应该注意什么 功能测试和压力测试MySQL DBA关注点 线上环境关注点 业务在大压力情况下,MySQL如何能活下来 DBA最应该做的事情 备份 建议每天全备 ...
- github的pull request是指什么意思?有什么用处(转)
https://www.cnblogs.com/-walker/p/6093277.html
- 轻松玩转Ant Design Pro一
ant design pro来源于ant design,其是一段自带样式的react组件,用于企业后台的漂亮的,可控的组件.ant design有很多组件和样式,不可能所有都记住,我们只要记住常用的, ...
- Go part 8 并发编程,goroutine, channel
并发 并发是指的多任务,并发编程含义比较广泛,包含多线程.多进程及分布式程序,这里记录的并发是属于多线程编程 Go 从语言层面上支持了并发的特性,通过 goroutine 来完成,goroutine ...
- 基于【 责任链模式】二 || 网关zuul过滤器封装
一.基于责任链模式封装网关拦截 上一篇文章中已经使用建造者模式对网关拦截进行封装,存在一个问题,在连接器build中,每一个拦截都要进行true判断,代码看起来冗余,下面使用责任链模式封装 1.基于责 ...
- 【转载】为什么我的网站加www是打不开的呢
在访问网站的过程中,我们发现有些网站访问不带www的主域名可以正常访问,反而访问加www的域名打不开,那为什么有的网站加www是打不开的呢?此情况很大可能是因为没有解析带www的域名记录或者主机Web ...
- 【转载】C#通过StartWith和EndWith方法判断字符串是否以特定字符开始或者结束
C#开发过程中针对字符串String类型的操作是常见操作,有时候业务需要判断某个字符串是否以特定字符开头或者特定字符结束,此时就可使用StartsWith方法来判断目标字符串是否以特定字符串开头,通过 ...
- display的属性
在一般的CSS布局制作时候,我们常常会用到display对应值有block.none.inline这三个值.,display这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型, ...
- element-ui 表格错行
//表格错行 .el-table th.gutter { display: table-cell !important }
- python selectors模块实现 IO多路复用机制的上传下载
import selectorsimport socketimport os,time BASE_DIR = os.path.dirname(os.path.abspath(__file__))''' ...