description


analysis

  • 比较麻烦树形\(DP\)

  • 不过这个我还是不算很懂……

  • 下次要注意思考,不要怕麻烦


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define MAXN 300005
#define MAXM MAXN*2
#define INF 100000000000007
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i)
#define rep(i,a) for (ll i=last[a];i;i=next[i])using namespace std;ll last[MAXM],next[MAXM],tov[MAXM],len[MAXM];
ll fa[MAXN],color[MAXN],f[MAXN],g[MAXN],h[MAXN],size[MAXN];
bool bz[MAXN];
ll n,T,tot,pos;
deque<ll>q;inline ll read()
{ll x=0,f=1;char ch=getchar();while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;
}
inline void link(ll x,ll y,ll z){next[++tot]=last[x],last[x]=tot,tov[tot]=y,len[tot]=z;}
int main()
{freopen("T1.in","r",stdin);T=read();while (T--){memset(f,0,sizeof(f));memset(g,0,sizeof(g));memset(h,0,sizeof(h));memset(bz,1,sizeof(bz));memset(fa,0,sizeof(fa));memset(size,0,sizeof(size));memset(last,0,sizeof(last));memset(next,0,sizeof(next));memset(tov,0,sizeof(tov));memset(len,0,sizeof(len));tot=pos=0,n=read();fo(i,1,n)color[i]=read();fo(i,1,n-1){ll x=read(),y=read(),z=read();link(x,y,z),link(y,x,z);}q.push_back(1),bz[1]=0;while (q.size()<n){ll x=q[pos++];rep(i,x)if (bz[tov[i]])++size[x],fa[tov[i]]=x,bz[tov[i]]=0,q.push_back(tov[i]);}while (q.size()){ll x=q[q.size()-1];q.pop_back();if (color[x])//白灰{f[x]=0;rep(i,x)if (fa[tov[i]]==x){ll tmp=min(g[tov[i]],h[tov[i]])+len[i];f[x]+=min(f[tov[i]],tmp);}}else f[x]=INF;if (color[x]^1)//黑灰{g[x]=0;rep(i,x)if (fa[tov[i]]==x){ll tmp=min(f[tov[i]],h[tov[i]])+len[i];g[x]+=min(g[tov[i]],tmp);}h[x]=INF;rep(i,x)if (fa[tov[i]]==x){ll tmp=min(f[tov[i]],h[tov[i]])+len[i];tmp=h[tov[i]]+g[x]-min(g[tov[i]],tmp);h[x]=min(h[x],tmp);}}else//白{g[x]=INF,h[x]=0;rep(i,x)if (fa[tov[i]]==x){ll tmp=min(f[tov[i]],h[tov[i]])+len[i];h[x]+=min(g[tov[i]],tmp);}}}printf("%lld\n",min(f[1],min(g[1],h[1])));}return 0;
}

转载于:https://www.cnblogs.com/horizonwd/p/11166964.html

【JZOJ3347】树的难题相关推荐

  1. P3714 [BJOI2017]树的难题(点分治/线段树/单调队列)

    P3714 [BJOI2017]树的难题 求解树上长度在L到R的树链中颜色段权值和最大的链. 首先求解树上链的问题,而且限制了链的长度,那么我们需要点分治处理,然后考虑每次分治,我们可以把链分成两类, ...

  2. P3714 [BJOI2017]树的难题

    P3714 [BJOI2017]树的难题 题意: 给你一棵 n 个点的无根树. 树上的每条边具有颜色.一共有 m 种颜色,编号为 1 到 m,第 i 种颜色的权值为 ci. 对于一条树上的简单路径,路 ...

  3. [BJOI2017]树的难题 点分治,线段树合并

    [BJOI2017]树的难题 LG传送门 点分治+线段树合并. 我不会写单调队列,所以就写了好写的线段树. 考虑对于每一个分治中心,把出边按颜色排序,这样就能把颜色相同的子树放在一起处理.用一棵动态开 ...

  4. jzoj3347,bzoj3257-[NOI2013模拟]树的难题【树形dp】

    正题 BZOJBZOJBZOJ题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3257 题目大意 一棵树上的节点有333种颜色,有边权. 选 ...

  5. [JZOJ3347] 【NOI2013模拟】树的难题

    题目 题目大意 给你一棵树,每个节点有三种黑.白.灰三种颜色. 你要割掉一些边(每条边被割需要付出一定的代价),使得森林的每棵树满足: 没有黑点或至多一个白点. 思考历程 这题一看就知道是一个树形DP ...

  6. 并不对劲的loj2179:p3714:[BJOI2017]树的难题

    题目大意 有一棵树,\(n\)(\(n\leq2*10^5\))个点,每条边\(i\)有颜色\(w_i\),共有\(m\)(\(m\leq n\))种颜色,第\(i\)种颜色的权值是\(c_i\)(\ ...

  7. 【BJOI2017】树的难题【点分治】【线段树】

    传送门 传送门 题意:给一棵树,树上有颜色,每种颜色有权值,定义一条路径的权值为所有颜色相同段的权值之和,求长度在[L,R][L,R][L,R]中的路径的最大权值. 数据范围:暴力过不了 显然是个点分 ...

  8. 【XSY2307】树的难题

    Description Solution 看到这种路径统计问题,一般就想到要用点分治去做. 对于每个重心\(u\),统计经过\(u\)的合法的路径之中的最大值. 第一类路径是从\(u\)出发的,直接逐 ...

  9. BZOJ.3257.树的难题(树形DP)

    题目链接 状态只与黑.白两点的颜色有关,于是用 \(f[x][i][j]\)表示当前以x为根节点,有\(i\)个黑点\(j\)个白点,使得x子树满足该条件的最小花费. 最后答案就是 \(min\{f[ ...

最新文章

  1. Visual Studio 2010Beta与Silverlight的更新
  2. AGS API for JavaScript 图表上地图
  3. js escape,unescape解决中文乱码问题的方法
  4. 虚拟化部署之Hyper-V虚拟网络配置
  5. 怎么求导来着?别费劲了,试试这个Python的通用求导法
  6. 【转】如何实现一个文件系统
  7. 【NOI2014】起床困难综合症 贪心
  8. 微信小程序navigateBack如何带参数
  9. qt扫雷鼠标c语言中文网,基于C语言实现的扫雷游戏代码
  10. smale学习之数学表达式(day5)
  11. [GBA ROM列表]不断补完中……
  12. oracle startup mount是什么意思,startup,startup mount,startup nomount之间的区别-Oracle
  13. springboot starter自定义实现公共模块
  14. linux下微生物软件,微生物多样性专题 | 扩增子测序分析实战(三)软件安装
  15. 【Java】基础知识-JAXP解析XML(一)
  16. 浙江电网发电市场竞价上网辅助决策系统的设计
  17. 2022年西式面点师(初级)复审考试及西式面点师(初级)证考试
  18. 生成模型之VAE与VQ-VAE
  19. 键盘输入时只按了一次,却出现好几个字母(Fn+F10关闭加速)
  20. kiel5编译报错error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

热门文章

  1. Spring-Session基于Redis管理Session
  2. 10.2. Incron - cron-like daemon which handles filesystem events
  3. 思科钱伯斯:云安全是根本
  4. Python OpenCV学习笔记之:灰度图像的直方图计算
  5. MySQL数据库修改密码忘记密码
  6. NHibernate和 FluentNHibernate
  7. 头文件和实现文件的关系
  8. 在GridView控件FooterTemplate内添加记录 Ver2
  9. CentOS Repos
  10. 讨论:.NET 4各项技术的应用前景,徐汇区网站设计