博客
关于我
Codeforces Round #592 (Div. 2) D. Paint the Tree(构造)
阅读量:387 次
发布时间:2019-03-05

本文共 1102 字,大约阅读时间需要 3 分钟。

在这里插入图片描述
在这里插入图片描述
题意:给定一棵树,要求你给每个节点涂色,要求连续的三个节点的颜色不能相同,每个节点涂三个颜色的花费分别是a【i】,b【i】,c【i】,问你满足要求的最小花费。
思路:很显然,画个图就知道能满足条件的只有链的情况,于是我们只要固定从根节点开始的前三个节点的颜色,那么整条链的颜色就都确定了。

#include
using namespace std;typedef long long ll;const int maxn=1e5+5;vector
g[maxn];ll a[maxn],b[maxn],c[maxn],ans[7][maxn],minn=2e18,temp;void dfs(int x,int fa,int a,int b,int c,int deep,int id){ if(deep%3==1) ans[id][x]=a; else if(deep%3==2) ans[id][x]=b; else if(deep%3==0) ans[id][x]=c; for(int to:g[x]) { if(to==fa) continue; dfs(to,x,a,b,c,deep+1,id); }}int main(){ int k,n,x,y,root=1; scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%lld",&a[i]); for(int i=1;i<=n;++i) scanf("%lld",&b[i]); for(int i=1;i<=n;++i) scanf("%lld",&c[i]); for(int i=1;i
2){ puts("-1");return 0; } } dfs(root,0,1,2,3,1,1);dfs(root,0,1,3,2,1,2);dfs(root,0,2,1,3,1,3);dfs(root,0,2,3,1,1,4);dfs(root,0,3,2,1,1,5);dfs(root,0,3,1,2,1,6); for(int i=1;i<=6;++i) { temp=0; for(int j=1;j<=n;++j) { if(ans[i][j]==1) temp+=a[j]; else if(ans[i][j]==2) temp+=b[j]; else temp+=c[j]; } if(temp

转载地址:http://trewz.baihongyu.com/

你可能感兴趣的文章
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>