杭电多校十 1007-Even Tree Split(组合+搜索)

题目链接:杭电多校10 - Virtual Judge

题目:

样例输入:

2
2
1 2
4
1 2
2 3
3 4

样例输出:

0
1

题意:给定一棵有n个节点的树,其中n是偶数,我们可以删掉树的一些边,问我们有多少种删边方案使得我们删完边后形成的所有连通子图的顶点个数均为偶数。其中删的边数至少为1.

分析:首先我们先对树进行一遍遍历求得以每个点为根的子树中的节点个数,我们看看有多少个子树的节点个数是偶数,那么如果我们把他的父边删除那么就会形成一个顶点个数是偶数的连通子图,当然,子图如果作后续分解我们就不需要单独讨论了,如果子树中节点个数是偶数,那么我们可以选择删除父边,也可以选择不删除父边,所以就是说对于每个以该节点为根的子树的节点个数是偶数的节点我们都有两种选择,但是需要注意的一点是删除父边的前提是父边存在,其实我们可以假设1号节点是根节点,那么唯一不存在父边的节点也就是根节点了,我们直接特判一下就好了,计算一下有多少个节点满足以该节点为根的子树中的节点个数是偶数(不算真正的根节点),每个根节点我们有两种选择,所以就是多少个2相乘,需要注意的一点是所有节点都不删边的情况我们需要去除掉,也就是整棵树作为一个连通图的情况,就是对答案减1即可。

细节见代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=4e5+10,mod=998244353;
int h[N],ne[N],e[N],idx;
int cnt[N]; 
long long ans;
void add(int x,int y)
{
	e[idx]=y;
	ne[idx]=h[x];
	h[x]=idx++;
}
void dfs(int x,int fa)
{
	cnt[x]=1;
	for(int i=h[x];i!=-1;i=ne[i])
	{
		int j=e[i];
		if(j==fa) continue;
		dfs(j,x);
		cnt[x]+=cnt[j];
	}
	if(x!=1&&cnt[x]%2==0) ans=(ans*2)%mod;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		scanf("%d",&n);
		idx=0;ans=1;
		for(int i=1;i<=n;i++) h[i]=-1;
		for(int i=1;i<n;i++)
		{
			int u,v;
			scanf("%d%d",&u,&v);
			add(u,v);add(v,u);
		}
		dfs(1,-1);
		printf("%lld\n",(ans-1+mod)%mod);
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Version.1.0.0.1-Lite ############################################################################################## [20230401]veis 1.用于下载STM32 G0 loader(片内flash下载) 2.支持选项字节配置 3.支持窗口日志输出以及保存日志为rtf格式 4.支持UART和STLINK SWD方式下载 5.支持连续下载模式(固定间隔5s开始一次下载) 6.只支持Windows平台 7.只支持bin格式下载 ############################################################################################## 使用说明: 1.解压xxx.zip压缩包 2.进入bin目录,运行STM32_Programmer.exe文件 3.单击【加载】按钮选择程序文件 4.选择对应串口号,G0芯片默认串口参数为:115200/even/8/1/close flow 5.单击下载按钮,等待下载即可 ############################################################################################## 文件夹说明: 1.log目录:存储每次下载的日志 2.Data_Base目录:片内flash分区配置文件(xml格式) 3.bin目录:下载工具及依赖库 4.Drivers目录:STLINK驱动 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值