洛谷P4084 [USACO17DEC]Barn Painting G 题解

题目链接:P4084 [USACO17DEC]Barn Painting G

题意:题意:给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。

这个题太水了

设 dp[u][1/2/3]dp[u][1/2/3]dp[u][1/2/3] 表示 uuu 结点涂 1/2/31/2/31/2/3 颜色的方案数

根据加法原理,

如果 uuu 已经有颜色了,那么
dp[u][j]=∑dp[v][k]×[k≠j]×[j=val[u]]dp[u][j] = \sum dp[v][k]\times [k\ne j]\times [j=\text{val[u]}] dp[u][j]=∑dp[v][k]×[k​=j]×[j=val[u]]
否则
dp[u][j]=∑dp[v][k]×[k≠j]dp[u][j] = \sum dp[v][k]\times [k\ne j] dp[u][j]=∑dp[v][k]×[k​=j]
时间复杂度 O(n)O(n)O(n)

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(1e5+15)
const int p=1e9+7;
int n,k;
int val[N],dp[N][4];
vector<int> vec[N];
void add(int &a,int b){a=(a+b%p)%p;}
void mul(int &a,int b){a=a%p*b%p;}
void dfs(int u,int f)
{for(int v : vec[u]){if(v==f)continue;dfs(v,u);for(int i=1; i<=3; i++){int res=0;for(int j=1; j<=3; j++)if(i!=j)add(res,dp[v][j]);mul(dp[u][i],res);}}
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> n >> k;for(int i=1,u,v; i<n; i++){cin >> u >> v;vec[u].push_back(v);vec[v].push_back(u);}for(int i=1; i<=n; i++)for(int j=1; j<=3; j++)dp[i][j]=1;for(int i=1,u; i<=k; i++){cin >> u >> val[u];for(int j=1; j<=3; j++)if(val[u]!=j)dp[u][j]=0;}dfs(1,1);cout << ((dp[1][1]+dp[1][2]+dp[1][3])%p+p)%p << endl;return 0;
}

转载请说明出处

洛谷P4084 [USACO17DEC]Barn Painting G 题解相关推荐

  1. [洛谷 P4084 USACO17DEC] Barn Painting G (树形dp经典)

    [洛谷 P4084 USACO17DEC] Barn Painting G 题目链接 大致题意: 给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数 ...

  2. 【洛谷P4084】Barn Painting【树形DP】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4084 一棵nnn个节点的树上有kkk个点已被染色.求将这棵树染成三种颜色且相邻的节点颜色不同的方 ...

  3. P4084 [USACO17DEC]Barn Painting

    题意翻译 题意:给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数. 翻译贡献者:Il_ItzABC_lI 题目描述 Farmer John has ...

  4. 信息学奥赛一本通 1379:热浪(heatwv) | 洛谷 P1339 [USACO09OCT]Heat Wave G

    [题目链接] ybt 1379:热浪(heatwv) 洛谷 P1339 [USACO09OCT]Heat Wave G [题目考点] 1. 图论:最短路径 [解题思路] 首先抽象建模.城镇为顶点,道路 ...

  5. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  6. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  7. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  8. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  9. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

最新文章

  1. 20行Python代码说清“量子霸权”
  2. 腾讯云连续四年登上KVM开源贡献榜,两项技术获评年度核心突破
  3. python3 for循环_从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列
  4. Block(Closure) Tips
  5. 比特币Merkle树和SPV机制
  6. angularjs 结构的两种写法(2)
  7. uniapp接收服务器消息,【教程】uniapp websocket实现消息推送
  8. bilibili有电脑版吗_哪个手机便签软件有电脑版?有跨平台的桌面便签软件吗 - 学显...
  9. DFS走迷宫问题(非最短路径)
  10. am最新版安装包_am软件下载-am剪辑软件(alight motion)中文版下载v2.3.1-11玩家网
  11. CloudStack(二)基础网络模式安装部署
  12. 前端 获取当前页面服务器ip_fiddler获取响应时间以及服务器IP
  13. CGI与JSP联系与区别
  14. 【DP + 卖股票】LeetCode 123. Best Time to Buy and Sell Stock III
  15. 多维数据查询效率分析(2)
  16. html5svg在线编辑器,HTML5 SVG图形在线编辑器
  17. 简述商业模式、商业模式画布与商业模式个人画布
  18. 炫酷的个人主页要怎么制作 ? |GitCode
  19. 从1到无穷大—机器学习篇
  20. 数据结构(3)常见的树

热门文章

  1. windows11文件夹修改图标/颜色/样式教程
  2. 百度登陆协议分析!!!用libcurl来模拟百度登陆
  3. fpu测试_正点原子STM32F4/F7水星开发板资料连载第五十章 FPU 测试实验
  4. 零空间维数的几何意义
  5. 创造与魔法服务器在哪里显示,创造与魔法监狱在哪里 创造与魔法监狱坐标
  6. java 获取主机名时报java.net.UnknownHostException
  7. R语言程序逻辑验证判断
  8. 【跟着项目学CSS】第一期-闪动LOGO
  9. 如何获取音乐链接地址
  10. 《机器学习技法》第5课笔记 核函数逻辑回归