首页 > 其他分享 >Independent Set

Independent Set

时间:2024-09-10 19:02:14浏览次数:1  
标签:Independent Set int pos 节点 dp MOD

Independent Set

给一棵树,每一个点可以染成黑色或白色,任意两个相邻节点不能都是黑色,求方案数,结果对 \(10^9+7\) 取模。

样例输入

3
1 2
2 3

样例输出

5

树形DP:

我们设状态 \(dp_{i,0/1}\) 为以 \(i\) 为根节点,且根节点颜色为( \(1 - 黑色\),\(0 - 白色\) )的子树中染色的方案数,那么可得状态转移方程为:

当 \(i\) 节点为白色时:

$ dp_{i,0} = \prod (dp_{to_i,0} + dp_{to_i,1}) $

为黑色时:

\(dp_{i,1} = \prod dp_{to_i,0}\)

状态初始化:

显然,当 \(i\) 节点为根节点时,$ dp_{i,0} = dp_{i,1} = 1$

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
const int MOD = 1e9 + 7;
vector<int> tree[MAXN];
long long dp[MAXN][2];
int n;
int x,y;
void dfs(int pos,int fa){
	int cnt = 0;
	for(int to : tree[pos]){
		if(to != fa){
			cnt++;
			dfs(to,pos);
			dp[pos][1] = (dp[pos][1] * dp[to][0]) % MOD;
			dp[pos][0] = (dp[pos][0] * (dp[to][1] + dp[to][0]) % MOD) % MOD;
		}
	}
	if(cnt == 0){
		dp[pos][0] = dp[pos][1] = 1;
	}
}
int main(){
	scanf("%d", &n);
	for(int i = 1;i <= n;i++){
		dp[i][0] = dp[i][1] = 1;
	}
	for(int i = 1;i <= n - 1;i++){
		scanf("%d%d", &x, &y);
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	dfs(1,0);
	cout<<(dp[1][0] + dp[1][1]) % MOD;
	return 0;
}

\(done\)

标签:Independent,Set,int,pos,节点,dp,MOD
From: https://www.cnblogs.com/wyl123ly/p/18406979

相关文章

  • HashSet和HashMap
    HashSet源码解析publicHashSet(){map=newHashMap<>();}privatestaticfinalObjectPRESENT=newObject();//这是一个空对象,在HashSet中用来占位,但本质上仍然是HashMappublicbooleanadd(Ee){returnmap.put(e,PRESENT)==null;}......
  • 【useTranslation】兼容数组解构和对象解构的三种实现方式
    useTranslation使用:数组解构:const[t,i18n]=useTranslation();对象解构:const{t,i18n}=useTranslation();useTranslation兼容数组解构和对象解构的三种实现方式:1.返回带属性的数组在这种实现方式中,返回一个数组,并为该数组添加对象属性。这样可以同时使用数组......
  • 在 PowerShell 中,执行 ISO 文件中的 setup 程序并进行静默安装通常涉及以下步骤:
    在PowerShell中,执行ISO文件中的setup程序并进行静默安装通常涉及以下步骤:挂载ISO文件:首先,您需要将ISO文件挂载到虚拟光驱中。这可以使用PowerShell实现。执行静默安装:挂载ISO文件后,您可以运行setup.exe并使用适当的静默安装参数来进行安装。下面是一个P......
  • VUE框架Vue3使用自定义的ref实现延迟加载效果的实现解决setTimeout过多导致的抖动问题
    import{customRef}from"vue";exportdefaultfunction(){//自己定义一个reffunctionuseDebouncedRef(value){//自定义的ref函数体需要符合ref规范//通过调用customRef来获取一个ref实例//调用customRef必须要给出一个回调函数作为形......
  • 12-LinkedHashSet
    LinkedHashSetHashSet得到的数据是无序的--->能不能得到的数据是有序的,嫩不能按照输入原序输出?---->LinkedHashSet特点唯一有序(按照输入顺序输出)多了一个总链表,按装入顺序串在一起原理其实就是在HashSet的基础上,多了一个总的链表,这个总链表将放入的元素串在一起,方便有......
  • b站小土堆|Dataset类代码实战
    完整代码如下:fromtorch.utils.dataimportDatasetfromPILimportImageimportosclassMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dirself.label_dir=label_dirself.path=os.path.join(self.ro......
  • 代码随想录训练营第25天|set去重
    491.非递减子序列classSolution{public:vector<vector<int>>result;vector<int>path;voiddfs(vector<int>&nums,intstartIdx){if(startIdx==nums.size()){return;}unordered_set&......
  • C++: set与map容器的介绍与使用
    本文索引前言1.二叉搜索树1.1概念1.2二叉搜索树操作1.2.1查找与插入1.2.2删除1.2.3二叉搜索树实现代码2.树形结构的关联式容器2.1set的介绍与使用2.1.1set的构造函数2.1.2set的迭代器2.1.3set的容量2.1.4set的修改操作2.2map的介绍与使用2.2.1map的构造......
  • 【题解】Solution Set - NOIP2024集训Day25 概率期望 dp
    【题解】SolutionSet-NOIP2024集训Day25概率期望dphttps://www.becoder.com.cn/contest/5515「QOJ2606」Gachapon\(f_{i,j}\):用一次合法的level-irolling能够抽到的\(j\)的期望个数。\(h_{i,j,k}\):在\(i\)次操作之内,抽到恰好\(k\)个\(j\)的概率。\[h_{i,j,k......
  • OpenCV(cv::Mat::setTo())
    目录1.函数定义2.示例3.使用场景4.性能5.注意事项cv::Mat::setTo()是OpenCV中用于将矩阵中的所有元素设置为一个给定的值。它可以应用于整个矩阵,也可以通过掩码(mask)仅对部分矩阵进行操作。这个函数常用于图像处理中的多种场景,例如图像填充、区域修改等。1.函数定......