首页 > 其他分享 >SM 集训记录

SM 集训记录

时间:2024-11-17 21:30:02浏览次数:1  
标签:原图 连通 const 记录 int long edge SM 集训

DAY0(2024.11.15)

T2 GYM104787M

首先定义一个副本连通块是只经过编号 \(> n\) 的节点形成的连通块。不难发现一个副本连通块(绿色)会连接着一些编号 \(< n\) 的叶子,然后与原图联通,并且与原图相同部分组成一个对称的连通块。就像下面的图一样:
image

然后假如有 \(lf\) 个叶子(蓝色节点),其实就是要割掉 \(lf - 1\) 条边,且删掉后的图连通。于是把那些删除的边全部翻到原树上,不难发现一个方案合法当且仅当在原树上每个连通块中都有一个叶子。于是直接 \(\mathrm {DP}\) 即可。

qwq
#include<bits/stdc++.h>
#define ll long long
#define pb emplace_back
using namespace std;

const int N = 5000 + 10;
const ll mod = 998244353;

struct edge{
	int v, next;
}edges[N << 1];
int head[N], idx;
int n;
bool chosen[N], vis[N];
ll f[N], g[N], pw2[N];

void add_edge(int u, int v){
	edges[++idx] = {v, head[u]};
	head[u] = idx;
}

int lfcnt;

void dfs(int u, int fa){
	//cout << u << " " << fa << "\n";
	if(!chosen[u]){lfcnt++; f[u] = 1; g[u] = 0; return;}
	f[u] = 0; g[u] = 1; vis[u] = 1;
	for(int i = head[u]; i; i = edges[i].next){
		int v = edges[i].v; if(v == fa) continue;
		dfs(v, u);
		f[u] = (f[u] * (g[v] + f[v]) % mod + f[v] * g[u] % mod) % mod;
		g[u] = (g[u] * (g[v] + f[v])) % mod;
		//cout << u << " " << v << " " << f[u] << " " << g[u] << "\n";
	}

}

signed main(){
    freopen("tree.in", "r", stdin);
    freopen("tree.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n; pw2[0] = 1;
	for(int i = 1; i <= n; i++) pw2[i] = 2ll * pw2[i - 1] % mod;
	for(int i = 1; i < n; i++){
		int x, y; cin >> x >> y;
		add_edge(x, y); add_edge(y, x);
	}
	for(int i = 1; i < n; i++){
		int x; cin >> x; chosen[x] = 1;
		for(int u = 1; u <= n; u++) vis[u] = 0, f[u] = g[u] = 0;
		ll ans = 1;
		for(int u = 1; u <= n; u++) if(!vis[u] && chosen[u]) lfcnt = 0, dfs(u, 0), ans = (ans * f[u] % mod * pw2[lfcnt - 1] % mod) % mod;
		cout << ans % mod << "\n";
	}

	return 0;
}

标签:原图,连通,const,记录,int,long,edge,SM,集训
From: https://www.cnblogs.com/little-corn/p/18551157

相关文章

  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现六
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现五
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • C#编写的日志记录组件 - 开源研究系列文章
          以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、项目目录;  2、源码介绍;1)实现;  2)使用;  3、运行界面;  4、使用介绍;参考例子里的代码,或者类库里提供的代码。 ......
  • 【学校训练记录】11月个人训练赛4个人题解
    A题意可以理解为在a,b的范围内如果一个数是某个整数的立方,求与其距离为k的范围内有几个整数的平方数,我们可以对于每个立方数求出其数量,注意边界问题#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inta,b,k;voidsolve(){ cin>>a>>b>>k; in......
  • 基于Java+SSM+Vue数字乡村管理系统的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发。感兴趣的可......
  • 记录一次我重装系统后,装蓝牙驱动的问题
    一直搜索不到我手机和耳机,然后我用360驱动大师和驱动总裁都分别试了更新了驱动,还是搜索不到。驱动总裁:首先我试了驱动总裁里边这个版本:结果还是搜索不到,然后我用“驱动卸载备份工具DriverStoreExplorer”,完全卸载了我蓝牙相关的驱动:又重装驱动总裁的另外一个蓝牙驱动版本:......
  • 把以前想的唐氏东西记录一下。
    题目当时什么hash状物都不会,但考虑一下哈希的本质,实际上是一种映射关系,在这一道题中,我们可以省掉哈希的进制,因为匹配的结果与位置无关,接下来就可以乱搞了。是真的乱搞(意思是随便想一个与之关联的函数),但是这个东西现在发现和sumhash很相似,实际上sumhash只是赋了一个随机......
  • ssm131保险业务管理系统设计与实现+jsp(论文+源码)_kaic
     毕业设计(论文)题目:保险业务管理系统设计与实现      摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本保险业务管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时......
  • ssm毕设野生动物保护资讯管理系统程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着社会的发展和人类活动范围的不断扩大,野生动物的生存面临着诸多威胁,如栖息地破坏、非法捕猎、气候变化等。这些问题引起了全球范围内的广泛关......
  • ssm毕设智能家居系统程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着科技的不断进步,物联网技术在各个领域迅速发展并得到广泛应用。智能家居系统作为物联网技术在家庭生活中的重要体现,正逐渐走进千家万户。如今......