首页 > 其他分享 >NOIP2003 传染病控制 深搜/剪枝

NOIP2003 传染病控制 深搜/剪枝

时间:2023-11-01 21:12:30浏览次数:37  
标签:剪枝 结点 断开 NOIP2003 int work dep ans 传染病

思路

题目大意是:把一棵树按深度分层,每一层断掉一条边,是剩下的节点数最小。

其实,我们可以将问题转换为断掉的节点数最多。

首先,贪心不可行,很容易被卡。

因为数据只有300,直接搜索就行。

搜索时一层一层搜,枚举断掉哪条边,并标记后代。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3+10,inf = 0x3f3f3f3f;
int f[N],n,p,s,ans;
vector<int> d[N],a[N];
void init(int u,int dep)
{
    d[dep].push_back(u);//第dep深度有u 
    for(int i = 0; i < a[u].size(); i++)
        init(a[u][i],dep + 1); 
} 
int work(int u,int t) //t = 1就代表这个结点u被用过了 
{
    int ss = 1; f[u] = t;
    for(int i = 0; i < a[u].size(); i++)
        ss += work(a[u][i],t); //继续断开和u连接的i结点或者拼接回来 
    return ss;
}
void dfs(int dep)
{
    for(int i = 0; i < d[dep].size(); i++)
    {
        if(f[d[dep][i]])continue;
        s += work(d[dep][i],1); //把深度为dep的第i个结点的所有结点全部断开 
        ans = max(ans,s); //获取当前最大断开结点数 
        dfs(dep + 1); //因为每一轮只能断掉一条传染链,所以接下来会传染深度+1 
        s -= work(d[dep][i],0); //把断开过的结点都接回来 
    }
}
int main()
{
    cin >> n >> p;
    for(int i = 1; i <= p; i++)
    {
        int x,y; cin >> x >> y;
        if(x > y) swap(x,y);
        a[x].push_back(y);
    }
    init(1,1); //建树,按层数深度把相邻结点都连接到d数组上
    dfs(2); //第一层是感染源,所以要从第二层开始 
    printf("%d",n - ans); //原有结点 - 最大断开结点数就是被感染人数 
    return 0;
}

 

标签:剪枝,结点,断开,NOIP2003,int,work,dep,ans,传染病
From: https://www.cnblogs.com/jyssh/p/17804109.html

相关文章

  • C++U5-深度优先搜索-03(记忆化搜索、剪枝和优化)
    ......
  • DFS 剪枝
    DFS剪枝\(DFS\)是一种常见的算法,大部分情况下,很少会爆搜为正解的题目。因为\(DFS\)的时间复杂度特别高。我们可以先写一段dfs的伪代码intans=最坏情况,now;//now为当前答案voiddfs(传入数值){if(到达目的地){ans=从当前解与已有解......
  • 最优性剪枝,可行性剪枝,优化搜索顺序,排除等效冗余
    杨辉三角:  //https://www.luogu.com.cn/problem/P1118//最优性剪枝://由高中知识可得,abcd四个数符合杨辉三角的数相乘,即//res=a+3*b+3*c+d,前面的常数项也就是杨辉三角的数字//根据此结论,进行剪枝//由于暴力枚举全排列+部分剪枝不可过,所以要考虑方法性剪枝......
  • 力扣18:四数之和(双指针+剪枝)
    给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d <na、b、c 和 d 互不相同nums[a]+nums[b]......
  • YOLOv5:对yolov5n模型进一步剪枝压缩
    YOLOv5:对yolov5n模型进一步剪枝压缩前言前提条件相关介绍具体步骤修改yolov5n.yaml配置文件单通道数据(黑白图片)修改models/yolo.py文件修改train.py文件剪枝后模型大小参考前言由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入YOLO系列专栏、自然语言处理专栏......
  • 搜索剪枝
    虽然我很懒,但集训期间还是强迫我自己写一下博客吧!搜索剪枝不搜不知道,我的搜索如同一坨shift。搜索没逻辑,剪枝随便捡,然后喜提withreturnvalue3221225725P1025数的划分非常简单的一道,数的拆分题题目描述将整数\(n\)分成\(k\)份,且每份不能为空,任意两个方案不相同(不......
  • 结构化剪枝 之 L1 剪卷积核 笔记
    论文:https://arxiv.org/pdf/1608.08710.pdf摘要CNN在各种应用中的成功伴随着计算和参数存储成本的显著增加。最近减少这些开销的努力包括在不损害原始精度的情况下修剪和压缩各个层的权重。然而,基于大小的权值修剪减少了完全连接层的大量参数,并且由于修剪后的网络中的不规则稀......
  • 模型压缩-剪枝算法详解
    近年来主流的模型压缩方法包括:数值量化(DataQuantization,也叫模型量化),模型稀疏化(Modelsparsification,也叫模型剪枝ModelPruning),知识蒸馏(KnowledgeDistillation),轻量化网络设计(LightweightNetworkDesign)和张量分解(TensorDecomposition)。其中模型剪枝是一种应用非常......
  • 基于微信小程序的传染病防控宣传系统
    由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改变运营策略。随着微信小程序的出现,解决了用户非独立APP不可访问内容的痛点,所以很多APP软......
  • P1042 [NOIP2003 普及组] 乒乓球
    [NOIP2003普及组]乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分......