【题解】CF1324F
题目大意:每个点不是黑点就是白点,求以每一个点为根时,选择出一个联通块,使得白点数与黑点数之差最大(白减黑)。
\(Solution\)
考虑先跑一遍\(dp\).
可以写出一个比较显然的方程:\(dp_i=val_i+\sum_{j\in son[i]}max(0,dp_j),val_i\)是节点\(i\)的颜色,如果是白则为\(1\),否则为\(-1\).
如果这样难不成要跑\(n\)遍?
恭喜喜提\(\text{Time Limit Error}\).
考虑只跑一遍,用第一遍的答案更新其它根的答案。
考虑一个点\(i\),若已经知道\(fa_i\)的答案,怎么推出它的答案?
考虑去掉它对\(fa_i\)的影响,在加上它本身的答案。
值得注意的是,当它爹的答案本身就小于0时,就不用选了。
所以,状态转移方程为(第二遍是\(f,\)第一遍是\(dp.\)):
\]
以上,这题\(O(n)\)做完了。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
int n,v[MAXN],head[MAXN<<1];
int tot,cnt1[MAXN],vis[MAXN];
int cnt2[MAXN],dp[MAXN],d[MAXN];
struct edge{
int nxt,to;
}e[MAXN<<1];
inline void add(int x,int y){
e[++tot].to=y;
e[tot].nxt=head[x];
head[x]=tot;
}
void dfs(int x){
vis[x]=1;
if(v[x])cnt1[x]=1,d[x]=1;
else cnt2[x]=1,d[x]=-1;
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(!vis[j]){
dfs(j);
cnt1[x]+=cnt1[j];
cnt2[x]+=cnt2[j];
if(d[j]<=0)continue;
else d[x]+=d[j];
}
}
}
void solve(int x,int fa){
if(x!=1)dp[x]=max(0,dp[fa]-max(0,d[x]))+d[x];
for(int i=head[x];i;i=e[i].nxt)if(e[i].to!=fa)solve(e[i].to,x);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&v[i]);
for(int i=1,x,y;i<n;++i){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
dfs(1);
dp[1]=d[1];
for(int i=1;i<=n;++i)vis[i]=0;
solve(1,0);
for(int i=1;i<=n;++i)printf("%d ",dp[i]);
cout<<endl;
return 0;
}
【题解】CF1324F的更多相关文章
- CF1324F Maximum White Subtree 题解
原题链接 简要题意: 给定一棵树,每个点有黑白两种颜色:对每个节点,求出包含当前节点的连通图,使得白点数与黑点数差最小.输出这些值. F题也这么简单,咳咳,要是我也熬夜打上那么一场...可惜没时间打啊 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
随机推荐
- 复杂一点的SQL语句:Oracle DDL和DML
DDL:对表或者表的属性进行了改变 create:创建表创建用户创建视图 创建表 create table student(id int,score int) ; student后面与括号之间可以有空 ...
- JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类
常用类 内部类 成员内部类.静态内部类.局部内部类.匿名内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类私有成员,而不破坏封装 可为外部类 ...
- 使用Android的硬件缩放技术优化执行效率
Unity3D研究院之使用Android的硬件缩放技术优化执行效率 http://www.xuanyusong.com/archives/3205 Android中GLSurfaceView在横竖屏切 ...
- Unity插件介绍——Odin
今天把玩了一款最近的热门插件——“Odin - Inspector and Serializer”,其功能强大到让人无语,简直是开发利器,屠龙宝刀!它的功能是扩展Inspector显示,它重写和增加了 ...
- P1073 最优贸易 分层图+最长路
洛谷p1073 最优贸易 链接 首先易得暴n2的暴力,暴力枚举就行 显然1e5的数据是会炸的 我们再分析题意,发现一共分为两个个步骤,也可以说是状态,即在一个点买入,在另一个点卖出,我们可以构建一个三 ...
- D - 英文题 (多组背包)
The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a gian ...
- HDU - 1005 -Number Sequence(矩阵快速幂系数变式)
A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...
- [BUUOJ记录] [BJDCTF2020]The mystery of ip
本题考察XFF头的ssti模板注入,没有过滤,算是入门题 进入题目hint.php的源码中可以看到一个hint 猜测是通过XFF头来获取信息的,发个HTTP请求添加一个XFF头测试一下: GET /f ...
- Python 面试题 字符串 删除多少个字符使得出现做多的字符数量大于等于字符串长度的一半.
str1 = input() num = {} for i in set(str1): num[i]=str1.count(i) max_value = max(num.values()) n=abs ...
- Java面试必问之-JUC
JUC:java.util.concurrent (Java并发编程工具类) 代码:D:\JAVA\Java_Learning\Elipse_Project\workspace200301EE\JUC ...