摘要:
官方题解是离线询问,dfs树形转线性,然后二分找区间。还有一种比较好的做法是直接dfs,将当前访问这个结点u相关的询问之前的状态存起来,然后访问完以后利用异或开关性,得到这颗子树上的答案。代码是学习别人的http://blog.csdn.net/squee_spoon/article/details... 阅读全文
摘要:
将源点和每个时间点连一条容量为k的边,表示同一时间最多剃k次胡子,将一个人和对应时间连一条容量为1的边,表示一个人在某个时间只能剃1次,再将每个人和汇点连一条容量为2的边表示一个人要剃两次。先是想贪心,结果不对,后来想到网络流,不会写好伤,下来写了好几发才过,写得依然丑。对最大流的理解加深了,图论有... 阅读全文
摘要:
先扫描一遍得到每个位置向后连续的'.'的长度,包含自身,然后在扫一遍求出初始的合并次数。对于询问,只要对应位置判断一下是不是'.',以及周围的情况。#includeusing namespace std;const int maxn = 3e5+5;char s[maxn];int post[max... 阅读全文
摘要:
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况#includeusing namespace std;int main(){ int n,m; scanf("%d%d",&n,&m); if(n == 1){ ... 阅读全文