niop 2003 传染病控制 (哎呀我氧化钙 坑了好久的搜索题)
/*
我觉得挺对的啊 实在是考虑不到有什么情况会判不了
70分 就这样吧 - -
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#define maxn 310
using namespace std;
int init()
{
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
int n,m,c[maxn],son[maxn][maxn],sum[maxn],g[maxn][maxn],f[maxn];
int size[maxn],fa[maxn],ans=0x3f3f3f3f;
vector<int>so[maxn];
void Build(int i)
{
f[i]=;
for(int j=;j<so[i].size();j++)
{
int Son=so[i][j];
if(f[Son]==)
{
fa[Son]=i;
son[i][++sum[i]]=Son;
Build(Son);
}
}
}
void Dfs(int i,int num)
{
int get=;
if(num>=ans)return;
int Sum=;
for(int j=;j<=size[i];j++)
if(f[fa[g[i][j]]]==)
{
Sum++;
get=;
}
else f[g[i][j]]=;
for(int j=;j<=size[i];j++)
{
if(f[g[i][j]]==)
{
f[g[i][j]]=;
Dfs(i+,num+Sum-);
f[g[i][j]]=;
for(int k=;k<=sum[g[i][j]];k++)
f[son[g[i][j]][k]]=;
}
}
if(get==)
{
ans=min(ans,num);
return;
}
}
int main()
{
n=init();m=init();
int x,y;
c[]=;
for(int i=;i<=m;i++)
{
x=init();y=init();
so[x].push_back(y);
so[y].push_back(x);
}
Build();
memset(f,,sizeof(f));
size[]=;g[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=sum[i];j++)
{
int t=c[i]+;
c[son[i][j]]=t;
g[t][++size[t]]=son[i][j];
}
Dfs(,);
printf("%d\n",ans);
return ;
}
/*
看了题解之后的 感觉思路和自己的差不多 只不过这样清晰多了
(好吧 不止清晰 .....100分 -)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define maxn 310
using namespace std;
int init()
{
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
int n,m,Max_c,son[maxn][maxn],sum[maxn],c[maxn];
int ans=0x3f3f3f3f,num=,f[maxn];
vector<int>so[maxn];
void Build(int i)
{
f[i]=;
for(int j=;j<so[i].size();j++)
{
int Son=so[i][j];
if(f[Son]==)
{
son[i][++sum[i]]=Son;
Build(Son);
}
}
}
void Dfs(int p)
{
int get=;
if(num>=ans)return;
int Sum=;
for(int i=;i<=n;i++)
if(c[i]==p)
for(int j=;j<=sum[i];j++)
{
get=;
c[son[i][j]]=p+;
num++;
}
num--;
for(int i=;i<=n;i++)
if(c[i]==p+)
{
c[i]=;
Dfs(p+);
c[i]=p+;
}
num++;
for(int i=;i<=n;i++)
if(c[i]==p+)
{
c[i]=;num--;
}
if(get==)
{
ans=min(ans,num);
return;
}
}
int main()
{
n=init();m=init();
int x,y;
c[]=;
for(int i=;i<=m;i++)
{
x=init();y=init();
so[x].push_back(y);
so[y].push_back(x);
}
Build();
for(int i=;i<=n;i++)
for(int j=;j<=sum[i];j++)
{
int t=c[i]+;
Max_c=max(Max_c,t);
c[son[i][j]]=t;
}
memset(c,,sizeof(c));
c[]=;
Dfs();
printf("%d\n",ans);
return ;
}
niop 2003 传染病控制 (哎呀我氧化钙 坑了好久的搜索题)的更多相关文章
- [COGS 0107][NOIP 2003] 传染病控制
107. [NOIP2003] 传染病控制 ★★★ 输入文件:epidemic.in 输出文件:epidemic.out 简单对比时间限制:1 s 内存限制:128 MB [问题背景] ...
- noip 2003 传染病控制(历史遗留问题2333)
/*codevs 1091 搜索 几个月之前写的70分 今天又写了一遍 并且找到了错误 */ #include<cstdio> #include<vector> #define ...
- 【填坑】bzoj3224 splay裸题
人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...
- 【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题
2016-06-18 当时关于块状链表的想法是错误的,之前维护的是一个动态的$\sqrt{n}$,所以常数巨大,今天才知道原因TwT,请不要参照这个程序为模板!!! 模板题水啊水~~~ 第一次写块状链 ...
- [NOIP补坑计划]NOIP2017 题解&做题心得
终于做完了…… 场上预计得分:?(省一分数线:295) 由于看过部分题解所以没有预计得分qwq 题解: D1T1 小凯的疑惑 题面 震惊!一道小学奥数题竟难倒无数高中考生! 欢迎大家以各种姿势*和谐* ...
- [NOIP补坑计划]NOIP2016 题解&做题心得
感觉16年好难啊QAQ,两天的T2T3是不是都放反了啊…… 场上预计得分:100+80+100+100+65+100=545(省一分数线280) ps:loj没有部分分,部分分见洛咕 题解: D1T1 ...
- [NOIP补坑计划]NOIP2015 题解&做题心得
感觉从15年开始noip就变难了?(虽然自己都做出来了……) 场上预计得分:100+100+60~100+100+100+100=560~600(省一分数线365) 题解: D1T1 神奇的幻方 题面 ...
- [NOIP补坑计划]NOIP2014 题解&做题心得
六道普及组题,没啥好说的 场上预计得分:100+100+100+100+100+100=600(省一分数线490) (AK是不可能AK的,这辈子不可能AK的) 题解: D1T1 生活大爆炸版石头剪刀布 ...
- [NOIP补坑计划]NOIP2013 题解&做题心得
场上预计得分:100+100+100+100+100+60=560(省一分数线410) 五道傻逼题+一道大搜索题…… 题解: D1T1 转圈游戏 题面 水题送温暖~ #include<algor ...
随机推荐
- 使用C语言获取当前系统的时间
要想使用C语言来获取当前系统的时间,办法如下: 需要提前准备的工作: #include <stdio.h> #include <time.h> #include <std ...
- 图片的css自适应
当需要css来缩放图片的时候,可以采用外层容器100%或者任意百分比, 内层图片img tag 没有宽高,用sass写经过断点后的mixin中的样式就是这样: .workscon_section{ w ...
- SSH:Connection closed by foreign host
以为和防火墙,性能,HOSTS.DENY,端口之类的有关,后来查了下,啥都没有关系. 就是同一台机器NAT之后,被另一台抢了先机. http://blog.sina.com.cn/s/blog_6d0 ...
- 深入浅出 Java Concurrency (3): 原子操作 part 2
转:http://www.blogjava.net/xylz/archive/2010/07/02/325079.html 在这一部分开始讨论数组原子操作和一些其他的原子操作. AtomicInteg ...
- 搜索与DP:SLIKAR
Problem: SLIKAR[题目描述]Josip 是个奇怪的画家,他想画一幅由 N*N 个点组成的图, N 是一个 2 的乘方 数(1, 2, 4, 8, 16 等.).每个点要么是黑色的,要么是 ...
- 根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用
一:根据标点符号分行,上图,代码很简单 二:代码 using System; using System.Collections.Generic; using System.ComponentModel ...
- 在kafka上对topic新增partition
对topic增加partition 参考官网site:http://kafka.apache.org/documentation.html#basic_ops_modify_topic 通过kafka ...
- hdoj3351-stack
Problem Description I'm out of stories. For years I've been writing stories, some rather silly, just ...
- 6种GET和POST请求发送方法
我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全. 无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库.对于多说,请求的格式如下: // 获取评论次数,参数是文章ID ...
- Necklace of Beads
http://poj.org/problem?id=1286 // File Name: poj1286.cpp // Author: bo_jwolf // Created Time: 2013年1 ...