C Cut 'em all! (dfs+思维)

【笔记】使用OrCAD对电路进行蒙特卡洛分析和最坏分析 使用OrCAD对电路进行蒙特卡洛分析和最坏分析 阅读详情
题目链接:C Cut ‘em all!
题意:

给出一个树,如果去掉一条边可以分成两个有偶数个点的连通块(子树)就可以去掉这条边,问最多能去掉几条。

思路:

1.如果奇数肯定去不了,怎么去都不可能分成多个偶数块的
2.如果是偶数,就从顶点1开始,当作父顶点开始dfs,(看了题解才知道dfs,真的菜)。dfs就是计算子树的顶点个数,如果子数是偶数个顶点,那么ans就可以++,然后把该子树标记成搜索过的,最后的答案要-1;因为整棵树肯定是偶数顶点,ans也会+1;

代码:

#include<iostream>
#include<vector>
#include<cstring>
#include<string> 
using namespace std;
const int Max=1e5+5;
vector<int>v[Max];  //存路径 
int vis[Max],ans=0; //vis 用来标记状态 
int dfs(int x)
{
    int son=0;   //计算子节点个数 
    vis[x]=1;
    for(int i=0;i<v[x].size();++i)
    {
        if(!vis[v[x][i]])
        {
            son+=dfs(v[x][i]);  //对每个没搜过的节点搜,记录子树顶点。 
        }
    }
    if((son+1)%2==0)ans++;  //偶数点的就++,因为整棵树还要加上根节点1个,所以son要+1。 
    return son+1;    
}
int main()
{
    memset(vis,0,sizeof(vis));
    int n,l,r;
    cin>>n;
    if(n&1)
    {
        cout<<"-1";
        return 0;
    }
for(int i=1;i<n;++i)
    {
        cin>>l>>r;
        v[l].push_back(r);
        v[r].push_back(l);
    }
    dfs(1);
    cout<<ans-1;
    return 0;
 } 
全能媒体工具深度测评(下篇一):AI图文生成+全能解压+图片去文字,一键搞定素材精修 解压50多种格式,文生图,图生图 阅读详情

相关推荐

RK806S PMIC电源管理芯片调试

当点按PWRON按键时,rk806上电开始启动bootloader和uboot,在执行到此处时检测到是由于按键启动的,所以0x5d的值是0x80,0x74的值是0x80,在一般情况下,mode都默认是none的,所以mode值为11,因此就进入了我们的if判断,若是由于按键启动的,则直接调用rk8xx_shutdown函数关掉,进入这个函数会看到实际是通过i2c给0x72寄存器的BIT(0)写1,使其关机。当SoC在12V电源已经接入,且处于关机状态时,使用PWRON按键开机,0x74的值则为0x80。

Y1anoohh的博客 2544

【CF982C】 C. Cut ‘em all(树形dp)

C. Cut 'em all! 题意 给定一棵树,问你能切掉最多多少条边,使得这棵树剩余连通块中点的个数都是偶数。 思路: 贪心地去删除,按照 dfs 序累计能删的边数。如果某子树内边数为偶数了,这个子树显然可以作为一个块单独存在,使得贡献 + 1。 最后要注意无解的情况。 Code:Code:Code: #include<bits/stdc++.h> #include<unordered_map> #define mem(a,b) memset(a,b,sizeof a)

酒姬民的博客 366

Alphafold2/multimer本地安装避坑指南:从Conda环境配置到GPU加速实战

本文详细介绍了Alphafold2/multimer本地安装的全流程,从Conda环境配置到GPU加速实战,特别针对常见的报错处理提供了解决方案。通过硬件环境检查、依赖安装技巧、OpenMM补丁应用等步骤,帮助研究人员高效部署蛋白质结构预测工具,提升计算效率。

weixin_29309213的博客 116

打了三年ACM,拿了几个金牌

作者:阿秀阿秀的求职笔记:https://interviewguide.cn你好,我是阿秀。前段时间一个学弟找我咨询计算机找实习,聊天中意外得知他是南阳理工大学的,我顿时就来了兴趣,在我的...

博客 8237

STM32F407 BootLoader实战:从零搭建到OTA升级(附完整源码)

本文详细介绍了为STM32F407微控制器从零搭建BootLoader并实现稳定OTA升级的完整实战指南。内容涵盖Flash分区规划、链接脚本配置、核心跳转逻辑、中断向量表重定向、可靠的升级流程设计,并深入探讨了双备份与回滚机制以提升工业级可靠性。文章提供了可直接使用的代码框架,并分享了关键调试技巧,帮助开发者快速掌握STM32远程固件更新技术。

weixin_29192211的博客 440

泄露测试仪CTS的Sentinel I28使用

本文介绍:泄露测试仪CTS的Sentinel I28使用

qq_34047402的博客 2199

信奥入门级相关的比赛(2025.01.13)

信奥入门级相关的比赛(2025.01.13)

青少年趣味编程 3920

【目标检测】IoU(交并比)详解及代码实现

1. IOU概述        IoU的全称为交并比(Intersection over Union),是目标检测中使用的一个概念,IoU计算的是“预测的边框”和“真实的边框”的交叠率-,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。 2. IoU计算        IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实

Roaddd的博客 2万+

Codeforces Round 916 (Div. 3):纪念小白的第一场cf比赛

再就是找出规律以便于我们遍历所有的和然后去找我们所要的值,三个没有顺序的数或者变量我们可以以固定遍历中间的数为抓手,算法的一个常用的思维就是找中间的数以及其他形式的内容将问题一分为二。正常我们找a[i]前的所有数组的最大值的求法:先循环i=1到n,再二重循环1到i,时间复杂度为o(n^2),超过了本题所限制的时间复杂度。方法:我们选中一个情况去解析,会发现所有的情况都是上面a[i]的前缀相加+b[i]的前缀最大值,即为每种情况都取得最大值的方法,然后我们根据方法去遍历所有的情况,即求出最大值。

weixin_65407195的博客 1169

FPGA原型验证(七):如何选择、搭建原型验证平台?

本篇概要::讨论了在项目初期选择目标FPGA平台的重要性,包括自制板卡与购买现成板卡之间的决策。主要是为那些希望建立基于FPGA的原型平台的工程师和设计师提供了深入的技术细节和决策指导,无论是选择自制还是购买现成的解决方案。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 943

智能车图像处理19-进阶篇11--斜入十字补线

这篇文章主要讲述智能车竞赛中如何对于斜入十字进行补线操作。

taiyuezyh的博客 7482

C - Cut 'em all! (对树进行DFS切割)

#include&lt;bits/stdc++.h&gt; using namespace std; #define maxn 200005 int ans,n,u,v; vector &lt;int&gt; mmp[maxn]; int siz[maxn]; void dfs(int u,int pre) { siz[u]=1; for(int i=0; i&lt;mmp[u]...

BePosit的博客 375

地图自定义编码CSV转换成ini文件

创 建 schema.ini 文件:有时,当您尝试使用 .csv 文件将自定义地理信息导入 Tableau 时,您可能会看到“无法使用.csv,因为它不包含唯一列”错误消息。这是因为您的 .csv 文件可能包含数值数据,例如数值邮政编码。对于新的地理角色,Tableau 将只接受文本字段。但是,您可以创建一个 schema.ini 文件,以指示 Tableau 应将您要导入的数值字段视为文本字段。...

wenyusuran的专栏 1975

CF982 C Cut 'em all!【树/DFS/思维】

【链接】:CF982C 【题意】:有一颗树,你需要切掉一些边,使这颗树分拆成若干个节点为偶数的联通分量,最多能切掉几条边。若不能切,输出-1。 【分析】: 1.若点数n为奇数,因为奇数不可能分为偶数,那么一定输出-1 2.若点数n为偶数,偶数=偶数+偶数。就从顶点1开始,当作父顶点开始dfs。dfs用于计算子树的顶点数,如果子树是偶数个顶点,那么ans就可以++,然后把该子树标记成搜索过的,最后...

weixin_33919941的博客 183

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Codeforces Round #484 (Div. 2) C. Cut 'em all!(思维)

题目链接 题意:去除尽可能多的边,使得剩下的连通块里点的个数都为偶数 解析: n为奇数结果为-1 偶数的话从一个点开始递归找节点的子节点的数目(包含本身),如果是偶数则可以直接去除,因为只有n-1个边,也就是说剩下的一定是一个偶数的连通块 #include &lt;bits/stdc++.h&gt; #define ll long long #define pb push_back #d...

城南的花 296

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C. Cut 'em all!

题目链接:http://codeforces.com/contest/982/problem/C 题目大意:就是先给出n个节点,然后再给出n条边,再判断最少去掉多少条边能使剩下的相连的是偶数。 具体思路:首先建立好对应关系,然后再进行dfs。判断每一个父亲节点的子节点的个数是不是偶数,如果是偶数就可以砍掉,如果不是偶数,则不可以砍掉。 代码如下: #include&lt;bits/stdc...

Let_life_stop的博客 435

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Codeforces 982C Cut 'em all! (dfs)

C. Cut 'em all!time limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou're given a tree with nn vertices.Your task is to determine the maximum possible ...

kolmikl 518

Codeforces 982C Cut 'em all!

C. Cut 'em all!time limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou're given a tree with nn vertices.Your task is to determine the maximum possible ...

zhlbjtu2016的博客 541

Codeforces982C、Cut 'em all!(DFS)

C. Cut 'em all! time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You're given a tree with nn vertices. Your task is to determine t...

Amove 837

[2020-4-17]BNUZ套题比赛div3 题解

目录: A - Greed B - Wrath C - Pride D - Splitting in Teams E - Months and Years A - Greed solution 问能否用两个瓶子就装完这些水。先把水都加起来,然后找最大容量的两个瓶子比较即可。 AC_Code #include<stdio.h> long long int a[100001],...

weixin_45843129的博客 245

codeforces div3(round535)比赛总结

T A 对于这道题,其实就是一个签到题,值得注意的就是,在两个区间找到的数字不能相等,所以加一个特殊判断就可以ac了。 代码: #include&amp;lt;iostream&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstdlib&amp;gt; #include&amp;lt;algorithm&amp;gt; #define MAXN 100010

qq_40549106的博客 878

[2020-3-13]BNUZ套题比赛div3解题报告

[2020-3-13]BNUZ套题比赛div3题解 很开心,本次再次蝉联了训练赛的第一名。排名如下 A - Row You’re given a row with $nnn$ chairs. We call a seating of people “maximal” if the two following conditions hold: There are no neighbors adjac...

BNUZ_Clearlove的博客 440

[2020-3-13]BNUZ套题比赛div3 题解

目录 A: Row B: Bus of Characters C: Cut 'em all D: Infinity Gauntlet E: High School: Become Human F: Three displays A: Row solution 给字符串最前面和最后面各加个零,表示空座位。任何人旁边都没有人即不能有“11”,在不违反以上条件情况下,不能再多坐人,即没有“000”。 ...

weixin_45843129的博客 270

[2020-3-27]BNUZ套题比赛div3 题解

目录 A - Restoring Three Numbers B - Make Them Equal C - Gourmet Cat D - Romaji E - Turn the Rectangles A - Restoring Three Numbers solution 给出四个数分别是a+b,a+c, b+c, a+b+c。然后求出a b c分别是多少。直接让最大数也就是a+b...

weixin_45843129的博客 356

[2021-4-23]BNUZ套题比赛div3

[2021-4-23]BNUZ套题比赛div3A - Spy Detected! CodeForces - 1512A A - Spy Detected! CodeForces - 1512A 当时没看数据范围,可以用map写,那样可以储存很大的数,然后发现不需要,代码如下: #include<iostream> using namespace std; #include<cstring> #include<map> int main() { int t; cin

m0_51678367的博客 268

[2021-04-02]BNUZ套题比赛div3

A题: 已知需要a分钟睡觉,那么分三种情况: 1.a<=b,那么睡够a分钟,闹钟还是没响. 2.d>=c,那么他还没睡觉就被吵醒了. 3.先计算睡觉要多少个周期,即a-b为被b这个闹钟吵醒后还需要睡的分钟数,c-d就是它被每个c闹钟吵醒前能睡的分钟数,那么(a-b)/(c-d)就是需要睡觉的周期(注意:可能(a-b)/(c-d)不能整除,相当于你睡觉需要8分钟(a-b),你每次小盹5分钟(c-d),那么(a-b)/(c-d)=1但是其实你需要睡两次,即答案是2才对,所以这里需要特判一下). #i

m0_51678367的博客 221
上一篇: D. Fair (bfs)
下一篇: F. Rain and Umbrellas (dp)
PinappleMi
博客等级 码龄9年 10粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值