AtCoder Regular Contest 083 E - Bichrome Tree
题目传送门:https://arc083.contest.atcoder.jp/tasks/arc083_c
题目大意:
给定一棵树,你可以给这些点任意黑白染色,并且赋上权值,现给定一个序列\(X_i\),满足对于每一个点\(i\),整棵子树内所有和\(i\)颜色相同的点的权值和为\(X_i\),问是否可能
首先因为权值大小任意,所以\(v\)的子树内权值和只要不超过\(X_v\)就好,那么对于一个点\(v\)假定其为黑色,那么子树中黑色总和为\(X_v\),白色总和就要尽量小,定义为\(f_v\)
那么选定\(v\)为黑色后,假定子树内黑色总和为\(B\),白色总和为\(W\),那么对于每个子节点\(v\)有两种选择
\(B+=X_u,W+=f_u\)或\(B+=f_u,W+=X_u\)
/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){
int x=0,f=1; char ch=gc();
for (;ch<'0'||ch>'9';ch=gc()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=gc()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline int read(){
int x=0,f=1; char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline void print(int x){
if (x<0) putchar('-'),x=-x;
if (x>9) print(x/10);
putchar(x%10+'0');
}
const int N=1e3,M=5e3;
int pre[N+10],now[N+10],child[N+10],tot;
int f[N+10],g[2][M+10],v[N+10];
void join(int x,int y){pre[++tot]=now[x],now[x]=tot,child[tot]=y;}
void dfs(int x){
for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]) dfs(son);
memset(g[0],63,sizeof(g[0]));
int T=0; g[T][0]=0;
for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]){
T^=1;
memset(g[T],63,sizeof(g[T]));
for (int i=0;i<=v[x];i++){
if (i>=v[son]) g[T][i]=min(g[T][i],g[T^1][i-v[son]]+f[son]);
if (i>=f[son]) g[T][i]=min(g[T][i],g[T^1][i-f[son]]+v[son]);
}
}
for (int i=0;i<=v[x];i++) f[x]=min(f[x],g[T][i]);
}
int main(){
int n=read();
for (int i=2;i<=n;i++) join(read(),i);
for (int i=1;i<=n;i++) v[i]=read();
memset(f,63,sizeof(f));
dfs(1);
printf(f[1]<inf?"POSSIBLE\n":"IMPOSSIBLE\n");
return 0;
}
AtCoder Regular Contest 083 E - Bichrome Tree的更多相关文章
- AtCoder Regular Contest 083
C - Sugar Water Time limit : 3sec / Memory limit : 256MB Score : 300 points Problem Statement Snuke ...
- [AtCoder Regular Contest 083] Bichrome Tree
树形DP. 每个点有两个属性:黑色点的权值和,白色点权值和,一个知道另一个也一定知道. 因为只要子树的和它相等的点得权值和不超过x[u],u点的权值总能将其补齐. 设计状态f[u]表示以u为根的子树, ...
- Atcoder Regular Contest 117 D - Miracle Tree(分析性质+构造)
Atcoder 题面传送门 笑死,阴间语文作业到现在还没写完,为了在这个点保持精神,我只好来颓篇题解辣 我们考虑探究一下怎么最小化 \(\max\limits_{i=1}^nE_i\),我们假设 \( ...
- AtCoder Regular Contest 083 D: Restoring Road Network
题意 有一张无向带权连通图(点数<=300),给出任意两点i,j之间的最短路长度dis[i][j].问是否存在一张这样的无向图.如果不存在输出-1.如果存在输出所有这样的无向图中边权和最小的一张 ...
- AtCoder Regular Contest 083 C: Sugar Water
题意 给你一个空杯子,有4种操作: 操作1 加100a克的水 操作2 加100b克的水 操作3 加c克的糖 操作4 加d克的糖 糖的质量不能超过水的质量e/100 糖和水的总质量不能超过f 糖的质量不 ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
随机推荐
- openwrt hotplug
由内核发出 event 事件. kobject_uevent() 产生 uevent 事件(lib/kobject_uevent.c 中), 产生的 uevent 先由 netlink_broadca ...
- 基于PHP函数的alert弹框
可以设置弹出信息,跳转地址,跳转的时间,跳转的信息标题提示: 手机端加上<meta name='viewport' content='width=device-width, initial-sc ...
- Linux主要命令
pwd 查看当前路径 cd .. 表示后一级目录级 cd . 表示当前目录 cd ../.. 后退两级 cd 表示进入当前家目录 date 返回当前的一个具体时间 -s 修改 ...
- Cookie 和 Session 的区别 与联系
一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,W ...
- hihocode #1388 : Periodic Signal NTT
#1388 : Periodic Signal 描述 Profess X is an expert in signal processing. He has a device which can ...
- 如何使用CSS3 @font-face
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...
- 获取Android设备无线和以太网MAC地址
package com.raycloud.wolf.blogformac; import android.net.wifi.WifiManager; import android.support.v7 ...
- Hive JOIN的基本操作 及 内部实现
1.HIVE基本操作: [一起学Hive]之十一-Hive中Join的类型和用法 注:HIve不支持非等值连接: 什么是等值连接: //Oracle SQL 不等值连接 //通过不等值连接查找7788 ...
- MYSQL进阶学习笔记十一:MySQL 表的分析,检查和优化!(视频序号:进阶_28)
知识点十二:MySQL 表的分析,检查和优化(28) 表的分析,检查和优化: 定期分析表: ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, ...
- expect的安装与使用
expect的安装与使用 是什么 expect 是用来进行自动化控制和测试的工具.主要是和交互式软件telnet ftp ssh 等进行自动化的交互. 如何安装 1.检测是否安装 ls /usr/bi ...