摘要:
题意:一颗有根树,树上每一个节点有一个灯,要支持两种操作 第一种操作是统计一颗子树内开着的灯个数。 第二种操作是将一个子树内的所有灯状态改变(开灯->关灯,关灯->开灯)。 解: 经典处理方法是先把树通过dfs序拍成区间,预处理出每个结点u管理的左右端点 然后变成区间改变01状态,求和问题 01状态 阅读全文
摘要:
直接用城市建点的话不好表达连边的关系 考虑把每条边看作左部点 右部点的话朴素想法是工人,但是也不好表达工人和材料的关系 发现工人的信息可以整合成一共有多少种材料,每种材料有多少人擅长 所以把材料看成右部点,城市和所需材料之间连容量为1的边,材料和汇点T之间连容量为“擅长该材料人数”的边 那基环树怎么 阅读全文
摘要:
观察到n+m最多才2000个点,正解也不是差分约束 但是它能跑:) 建图比较平凡不记述 难得的是用链式前向星T了,改vector过了 T9的话是加了随机化优化,cin读入,链式前向星存边 1513ms的是没加随机化优化,scanf读入,vector存边 857ms的是没加随机化优化,scanf读入, 阅读全文
摘要:
考虑怎么处理关系为0的状况 最开始写了一个分类讨论,然后发现这俩等式是矛盾的并不在一起,遂丢进垃圾箱里 但是,其实不关心谁大谁小,只要满足abs|Ai-Aj|==1就可以 根据解绝对值不等式的知识,解得: -1<=Ai-Aj<=1 yeah,现在有不等式了,怎么处理最大化极差的问题?看到不等式想到跑 阅读全文
摘要:
正解据说是贪心+dp 可惜我这个人没什么脑子:) (遇到了能用差分约束也能用dp+贪心的第二题了,真是神奇 假设有一组合法的sum就能逆推出di,因为ai+di+1=sumi最小化Σdi就是最小化Σsumi考虑sumi应该满足的条件1.是递增的sumi>=sum(i-1)2.sumi<=sum(i- 阅读全文
摘要:
最短路三角形不等式:Xi<=Xj+w(根据最短路的定义,要是不满足的话就不是最短路了) 给出若干个形如Xi-Xj<=w的约束条件,考虑求一组合法的解。 把问题转化成求最短路,对于Xi-Xj<=w,我们从j向i连一条边权为w的边 如果有负环的话即无解。 ...? 但差分约束难搞一点的话还要求最大解、最 阅读全文
摘要:
考虑黑白染色,i+j%2==1的为黑格 一块多米诺就要覆盖一黑一白,相当于一个匹配 那全覆盖也就是存在完美匹配 (应该是网络流经典的trick? 讨论选取的点来自同一边和两边 1.同一边 任意挑选两个点去掉后左右两边个数不相等,肯定不存在完美匹配 贡献是cnt*(cnt-1)/2*2=cnt*(cn 阅读全文
摘要:
根据线性代数的知识可知邻接矩阵自乘相当于做floyed 把输入转化为01矩阵(显然>1的数和1是等价的)得到邻接矩阵 问是否存在k次后所有数都为正数等价为自乘k次后所有点两两可达 转化为图论,用tarjan缩点判断scc的数目是否只有一个,或者直接bitset优化folyed也可以 #include 阅读全文
摘要:
裸的tarjan 依题意有向图上i和j之间能互相到达,i和j肯定在同一个scc内 最小的代价就是Σ每个scc内最小的cost 方案就是每个scc内最小值的数的乘积 #include<bits/stdc++.h> using namespace std; const long long mod=100 阅读全文
摘要:
一眼并查集 但是怎么维护,借鉴了别人的思路 如果有重叠的话端点一定要重叠,所以用端点来代表线段就可以了 但是暴力连边复杂度受不了 考虑把线段拆成两点,同色的放入一个集合,更新的时候不断合并直至size()==1(==1不erase是因为要留下r最大的,显然只有r最大的有用) #include<bit 阅读全文