描述

研究表明,这种传染病的传播具有两种很特殊的性质;
第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不
得病,或者是XY之间的传播途径被切断,则X就不会得病。

第二是,这种疾病的传播有周期性,在一个疾病传播周期之内,传染病将只会感染一
代患者,而不会再传播给下一代。

这些性质大大减轻了蓬莱国疾病防控的压力,并且他们已经得到了国内部分易感人群
的潜在传播途径图(一棵树)。但是,麻烦还没有结束。由于蓬莱国疾控中心人手不够,同时也缺乏强大的技术,以致他们在一个疾病传播周期内,只能设法切断一条传播途径,而没有被控制的传播途径就会引起更多的易感人群被感染(也就是与当前已经被感染的人有传播途径相连,且连接途径没有被切断的人群)。当不可能有健康人被感染时,疾病就中止传播。所以,蓬莱国疾控中心要制定出一个切断传播途径的顺序,以使尽量少的人被感染。你的程序要针对给定的树,找出合适的切断顺序。

格式

输入格式

输入格式的第一行是两个整数n(1≤n≤300)和p。接下来p行,每一行有两个整数i
和j,表示节点i和j间有边相连(意即,第i人和第j人之间有传播途径相连)。其中节点
1是已经被感染的患者。

输出格式

只有一行,输出总共被感染的人数。

 
改了好久才AC,代码有点乱(很值得好好琢磨的一道题)
 #include<iostream>
 #include<vector>
 #include<cstring>
 using namespace std;
 struct edge{
   int f,t;
 };
 +;
 int n,p,node[maxn],flag[maxn],ans=maxn,cs;
 vector<edge> b[maxn];
 vector<int> GG[maxn];
 vector<int> G[maxn];
 int calcsize(int x){
   node[x]=;
   ) return node[x];
   ;i<G[x].size();i++) node[x]+=calcsize(G[x][i]);
   return node[x];
 }
 void dfs1(int n,int f){
   ){
     return;
   }
   ;i<G[f].size();i++){
     b[n].push_back((edge){f,G[f][i]});
     dfs1(n+,G[f][i]);
   }
 }
 void vis(int x){
     flag[x]=;
     ;i<G[x].size();i++) vis(G[x][i]);
 }
 void disvis(int x){
     flag[x]=;
     ;i<G[x].size();i++) disvis(G[x][i]);
 }
 void dfs(int n,int now){
     ans=min(ans,now);
     if(n>cs){
         return;
     }
     ;i<b[n].size();i++){
         edge &e=b[n][i];
         if(!flag[e.f]){
             vis(e.t);dfs(n+,now-node[e.t]);
             disvis(e.t);
         }
     }

 }
 void bulid(int u,int fa){
     int d=GG[u].size();
     ;i<d;i++){
         int v=GG[u][i];
         if(v!=fa){
             G[u].push_back(v);
             bulid(v,u);
         }
     }
 }
 int main()
 {
   int i,j;
   cin>>n>>p;
   ;k<p;k++){
     cin>>i>>j;GG[i].push_back(j);GG[j].push_back(i);
   }
   memset(flag,,sizeof(flag));
   bulid(,-);calcsize();dfs1(,);
   ;i<=maxn;i++){
     ){
         cs=i-;break;
     }
   }dfs(,n);cout<<ans;
   ;
 }
 

NOIP2003 传染病防治的更多相关文章

  1. Catalan数 && 【NOIP2003】出栈序列统计

    令h(1)=1, h(0)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)h(0) (n>=2) =C(2n, n)/(n+1) ...

  2. 卡特兰数 BZOJ3907 网格 NOIP2003 栈

    卡特兰数 卡特兰数2 卡特兰数:主要是求排列组合问题 1:括号化矩阵连乘,问多少种方案 2:走方格,不能过对角线,问多少种方案 3:凸边型,划分成三角形 4:1到n的序列进栈,有多少种出栈方案 NOI ...

  3. CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树(树型动态规划)

    CJOJ 1010[NOIP2003]加分二叉树 / Luogu 1040 加分二叉树(树型动态规划) Description 设 一个 n 个节点的二叉树 tree 的中序遍历为( 1,2,3,-, ...

  4. 洛谷 P1045 & [NOIP2003普及组] 麦森数

    题目链接 https://www.luogu.org/problemnew/show/P1045 题目大意 本题目的主要意思就是给定一个p,求2p-1的位数和后500位数. 解题思路 首先看一下数据范 ...

  5. [NOIP2003]栈 题解(卡特兰数)

    [NOIP2003]栈 Description 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作: 1.将一个数,从操作数序 ...

  6. NOIP2003 神经网络(bfs)

    NOIP2003 神经网络 题目背景: 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应 ...

  7. [NOIP2003普及组]麦森数(快速幂+高精度)

    [NOIP2003普及组]麦森数(快速幂+高精度) Description 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998 ...

  8. cogs 983. [NOIP2003] 数字游戏

    983. [NOIP2003] 数字游戏 ★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比时间限制:1 s   内存限制:128 MB 题目描述 丁丁最近沉 ...

  9. cogs 106. [NOIP2003] 加分二叉树(区间DP)

    106. [NOIP2003] 加分二叉树 ★☆   输入文件:jfecs.in   输出文件:jfecs.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 设 一个 n ...

随机推荐

  1. 多用less命令,不会输入h查看对应的详细文档

    在开发项目时候,难免要查看日志排查错误.之前只会用cat , more, less, tac, tail的简单功能, 但在实际工程中还是不够用的,至少效率很低.今天抽空看了下以下的博客,并实际进行了简 ...

  2. android 开源项目一览

    直接拿来用!最火的Android开源项目(一) http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects ...

  3. ScalaTour-1.基础

    import java.io.{BufferedReader, File, FileInputStream, InputStreamReader} import java.util import ja ...

  4. Expert C# 5.0中的Linq部分

    1.先看看.NET中的Linq 2.扩展方法 3.Lambda表达式和表达式树 4.Linq中的延迟操作 5.Linq中的查询方法 5.1分割操作 5.2连接操作 5.3排序操作 5.4分组和连接 5 ...

  5. sax,Dom,等解析方式地址 ?

    Android中使用SAX对XMl文件进行解析 http://blog.csdn.net/developer_jiangqq/article/details/7197045 使用SAX技术对XML文档 ...

  6. tuple解包给类的构造函数

    首先我们的第一步当然是将tuple解包.tuple提供了一个get函数来获取第N个元素.例如: get<1>(make_tuple(...)); 要将一个tuple全部拆解,就可以使用通过 ...

  7. 树莓派通过apt方式安装opencv库

    1.安装opencv     开始之前进行必要的更新工作. sudo apt-get update     安装opencv. sudo apt-get install libcv-dev     安 ...

  8. Android开发者需要面对的8大挑战

    移动开发变得越来越受欢迎,但移动开发者正面临着一系列挑战.本文将介绍的是Android开发者需要面对的8个不利因素,例如缺乏硬件标准化,以及软件碎片.为Android OS开发app,给予了开发人员极 ...

  9. CentOS7 安装MongoDB 3.0服务

    1,下载&安装 MongoDB 3.0 正式版本发布!这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活而且易于管理的数据库管理系统.MongoDB宣称,3.0新版本不只 ...

  10. 编写webpy程序,iep 报错,ulipad 运行正确

    在web.py编程中,使用模板文件时,iep下会报错.ulipad不会报错. 用python 运行不报错. 在寻找答案.初步估计是iep的python运行环境有问题. 如图: