【搜索】P1041 传染病控制

news/2024/7/18 16:33:55

题目链接:P1041 传染病控制

题解:

这个题目是看别人的博客做出来的,其实挺不错的一个题目,考察的东西挺多的,

一个dfs可以处理5个东西:

1、找出父亲

2、找出深度

3、每一层的节点,存进Vector里。

4、更新最大深度

5、找出子树的大小

然后再设定一个Find,找父节点。

只要能找到1,说明感染了,否则说明这个节点已经在之前的操作中切断过。

 

真的不错的一道题。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N = 305;
 4 vector<int>G[N];
 5 vector<int>V[N];
 6 int Sz[N],dep[N],Pre[N];
 7 int n,m,p,ans,Mx_dep;
 8 bool F[N];
 9 bool Find(int x){
10     if( x == 1 ) return false;
11     if( F[x] == 1 ) return true;
12     else return Find(Pre[x]);
13 }
14 void Build(int Now , int Father ){
15     Pre[Now] = Father;              //父节点
16     dep[Now] = dep[Father] + 1 ;    //深度
17     V[dep[Now]].push_back(Now);     //每一层有什么元素
18     Mx_dep = max( Mx_dep , dep[Now] );//求出最深深度
19     Sz[Now] = 1 ;                   //递归求出子树大小
20     for( auto To : G[Now] ){
21         if( To == Father ) continue;
22         Build( To , Now );
23         Sz[Now] += Sz[To];
24     }
25 }
26 void dfs(int depth,int tot ){
27     if( depth == Mx_dep + 1 )
28         return ;
29     for( auto To : V[depth] ){
30         if( Find(To) ) continue; //直接被感染
31         F[To] = 1 ;              //尝试切断
32         ans = max( ans , tot + Sz[To] ) ;
33         dfs(depth+1,tot + Sz[To] );
34         F[To] = 0;               //恢复原状
35     }
36 }
37 int main()
38 {
39     scanf("%d%d",&n,&p);
40     for( int i=0,u,v ; i<p ; i++ ){
41         scanf("%d%d",&u,&v);
42         G[u].push_back(v);
43         G[v].push_back(u);
44     }
45     Build(1,0);
46     dfs(2,0);
47     printf("%d\n",n-ans);
48     return 0;
49 }
50 /*
51 
52 7 6
53 1 2
54 1 3
55 2 4
56 2 5
57 3 6
58 3 7
59 
60 3
61 */
View Code

 

转载于:https://www.cnblogs.com/Osea/p/10890447.html


http://www.niftyadmin.cn/n/1147295.html

相关文章

专家称“震中将迁移到西安”说法无科学依据

四川省地震局提供的汶川8.0级地震序列分布图&#xff08;5月12日至5月19日&#xff09;。 新华社发 四川等地发布了汶川余震预报后&#xff0c;本报记者分别对中国地震局地球物理研究所研究员、中国地震学会地震学专业委员会副主任许忠淮和中国地震台网中心的有关负责人(以下简…

zookeeper: 分布式锁的实现

为什么要用分布式锁 Martin Kleppmann是英国剑桥大学的分布式系统的研究员&#xff0c;之前和Redis之父Antirez进行过关于RedLock(红锁&#xff0c;后续有讲到)是否安全的激烈讨论。Martin认为一般我们使用分布式锁有两个场景: •效率:使用分布式锁可以避免不同节点重复相同的工…

人民币汇率破6.96年内累计升幅近5%

新华社上海5月21日专电&#xff08;记者潘清&#xff09;国际汇市美元全面走弱&#xff0c;推动人民币对美元汇率大幅走高。来自中国外汇交易中心的最新数据显示&#xff0c;5月21日人民币对美元汇率中间价升破6&#xff0e;96&#xff0c;以6&#xff0e;9597创下汇改以来新高…

11.时间序列分析狠

1.模式识别 2.参数故居估计 3. 模型检验与预测禁烟转载于:https://www.cnblogs.com/Firesun/p/10896557.html

诺基亚拟在其一半手机中配备GPS功能

诺基亚定位业务负责人Michael Halbherr日前在接受路透社采访时表示&#xff0c;诺基亚计划未来数年内在其销售的一半手机产品中将添加导航功能&#xff0c;以便在手机价格不断下降的今天寻找新的营收源。 Michael Halbherr说&#xff0c;他对诺基亚确定的在2010年到2012年间在…

让CRM成为萝卜 SaaS成为白菜

CRM、ERP、SaaS等一直在一个局限的圈子里面谈论着&#xff0c;但到底有多少企业老板能够了解&#xff1a;“CRM、ERP、SaaS能够为企业带来什么&#xff1f;” 中国用户使用的软件总是要几个外文字母来表达&#xff0c;似乎这样才更加清楚定义“它”到底是什么&#xff0c;似乎…

美化Div的边框

CSS修饰Div边框 大部分时候&#xff0c;Div的边框真的做的太丑了&#xff0c;如果不用很多样式来修饰的话&#xff0c;它永远都是那么的突兀。作为一个后端开发&#xff0c;前端菜鸡&#xff0c;在没有设计和前端开发自己独自做项目的时候常常会遇到Div边框过于丑陋导致界面看上…

索尼游戏业务亏损 PS3未达销售目标

据国外媒体报道&#xff0c;日本索尼周三表示&#xff0c;在今年三月结束的07/08财年中&#xff0c;公司PS3游戏机的发货量为924万部&#xff0c;没有达到预期950万部的销售目标。索尼原定PS3 全年的销售目标为1100万部&#xff0c;面对严峻的销售形式&#xff0c;三个月前&…