【题解】Atcoder ARC#83 E-Bichrome Tree
哈哈~自己做出来的E题!(虽然这题被机房大佬强D极水)。最开始神经错乱,写了个完全不对的贪心,竟然只错了4个点(。•ˇ‸ˇ•。)
可以发现,一个节点的子树内部和他颜色相同的节点权值和 是固定的,那么不一定的就是另外的那个颜色的权值和了。而由于这个图上权值可以从 0 开始取值,显然越小越好。这样就可以dp啦。
其实我这个里面多了一个维度,就是记录当节点为黑色/白色时怎么怎么样,但其实这两个状态完全对称,根本没必要再多开一个维。但我就懒得改啦~
#include <bits/stdc++.h>
using namespace std;
#define maxn 6000
#define INF 999999999
int n, W[maxn], f[][][maxn], g[maxn][]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} struct edge
{
int cnp, to[maxn], last[maxn], head[maxn];
edge() { cnp = ; }
void add(int u, int v) { to[cnp] = v, last[cnp] = head[u], head[u] = cnp ++; }
}E1; bool Down(int &x, int y)
{
if(y >= INF) return ;
x = min(x, y); return ;
} void dfs(int u)
{
for(int i = E1.head[u]; i; i = E1.last[i]) { int v = E1.to[i]; dfs(v); }
for(int i = ; i <= ; i ++)
for(int j = ; j <= W[u]; j ++) f[][i][j] = INF;
f[][][] = f[][][] = ; int pre = , now = ;
for(int i = E1.head[u]; i; i = E1.last[i])
{
int v = E1.to[i];
for(int j = ; j <= ; j ++)
for(int k = ; k <= W[u]; k ++) f[now][j][k] = INF;
for(int k = ; k <= ; k ++)
for(int j = ; j <= W[u]; j ++)
{
int flag = ;
if(j - W[v] >= ) flag = Down(f[now][k][j], f[pre][k][j - W[v]] + g[v][k]);
if(j - g[v][k ^ ] >= ) flag = Down(f[now][k][j], f[pre][k][j - g[v][k ^ ]] + W[v]);
}
swap(pre, now);
}
g[u][] = g[u][] = INF;
for(int k = ; k <= ; k ++)
for(int j = ; j <= W[u]; j ++)
g[u][k] = min(g[u][k], f[pre][k][j]);
} int main()
{
n = read();
for(int i = ; i <= n; i ++) { int x = read(); E1.add(x, i); }
for(int i = ; i <= n; i ++) W[i] = read();
dfs();
if(g[][] < INF || g[][] < INF) printf("POSSIBLE\n");
else printf("IMPOSSIBLE\n");
return ;
}
【题解】Atcoder ARC#83 E-Bichrome Tree的更多相关文章
- [题解] Atcoder ARC 142 D Deterministic Placing 结论,DP
题目 (可能有点长,但是请耐心看完,个人认为比官方题解好懂:P) 首先需要注意,对于任意节点i上的一个棋子,如果在一种走法中它走到了节点j,另一种走法中它走到了节点k,那么这两种走法进行完后,棋子占据 ...
- [AtCoder Regular Contest 083] Bichrome Tree
树形DP. 每个点有两个属性:黑色点的权值和,白色点权值和,一个知道另一个也一定知道. 因为只要子树的和它相等的点得权值和不超过x[u],u点的权值总能将其补齐. 设计状态f[u]表示以u为根的子树, ...
- [题解] Atcoder ARC 142 E Pairing Wizards 最小割
题目 建图很妙,不会. 考虑每一对要求合法的巫师(x,y),他们两个的\(a\)必须都大于\(min(b_x,b_y)\).所以在输入的时候,如果\(a_x\)或者\(a_y\)小于\(min(b_x ...
- Bichrome Tree
Bichrome Tree 时间限制: 1 Sec 内存限制: 128 MB 题目描述 We have a tree with N vertices. Vertex 1 is the root of ...
- [题解] Atcoder Regular Contest ARC 148 A B C E 题解
点我看题 题目质量一言难尽(至少对我来说 所以我不写D的题解了 A - mod M 发现如果把M选成2,就可以把答案压到至多2.所以答案只能是1或2,只要判断答案能不能是1即可.如果答案是1,那么M必 ...
- [题解] Atcoder Regular Contest ARC 147 A B C D E 题解
点我看题 A - Max Mod Min 非常诈骗.一开始以为要观察什么神奇的性质,后来发现直接模拟就行了.可以证明总操作次数是\(O(nlog a_i)\)的.具体就是,每次操作都会有一个数a被b取 ...
- 题解-AtCoder Code-Festival2017 Final-J Tree MST
Problem \(\mathrm{Code~Festival~2017~Final~J}\) 题意概要:一棵 \(n\) 个节点有点权边权的树.构建一张完全图,对于任意一对点 \((x,y)\),连 ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
随机推荐
- sqlite helper
//-------------------------------------------------------------------------- // // Copyright (c) BUS ...
- java nio之Buffer
一.JAVA NIO 是在和channel交互的时候使用的.Channel将数据读入缓冲区,然后我们又从缓冲区访问数据.写数据时,首先将要发送的数据按顺序填入缓冲区.基本上,缓冲区只是一个列表,它的所 ...
- JS代码优化及技巧
案例一 对象参数独立化 情景:为多个日期文本框添加日期选择器 源代码: $('#PropertySalesAdviceExchnagedDate1').datepicker({ showOn: 'b ...
- STM32f469I discovery烧写demo例程
1. 首先安装STM32 ST-Link Utility V3.7,电脑接板子的CN1,然后在STM32 ST-Link Utility V3.7点击连接目标板子(目标-连接),点击External ...
- Kubernetes网络方案的三大类别和六个场景
欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文章根据网易云资深解决方案架构师 王必成在云原生用户大会上的分享整理. 今天我将分享个人对于网络方案的理解,以及网易云在交付 Kubernetes ...
- Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)
https://meta.box.lenovo.com/link/view/82c451b41ce34e81a4b34cb46747d3d5 第1章 熟悉Unity软件的操作 第2章 打地鼠 (已看) ...
- lintcode407 加一
加一 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 该数字按照大小进行排列,最大的数在列表的最前面. 您在真实的面试中是否遇到过这个题? Yes 样例 给定 [1,2,3] ...
- hadoop3.0新特性及新功能
Hadoop-3.0.0-alpha2版本发布,相比之前的hadoop-2.x有一系列的功能增强.但目前还是个alpha版本,有很多bug,且不能保证API的稳定和质量. 主要变化 Java最低版本要 ...
- Document对象内容集合
document 文挡对象 - JavaScript脚本语言描述———————————————————————注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写否则会提示你一 ...
- Uva 1600 Patrol Robot (BFS 最短路)
这道题运用的知识点是求最短路的算法.一种方法是利用BFS来求最短路. 需要注意的是,我们要用一个三维数组来表示此状态是否访问过,而不是三维数组.因为相同的坐标可以通过不同的穿墙方式到达. #inclu ...