摘要:
题目:单点修改、树链查询。 可以直接用树链剖分做。。 修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000; 听说会超时。。 这题也可以用DFS序来做。 先不看修改,单单查询:可以求出每个点到根的xor值,那么对任意两点的查询就等于xor(u)^xor(v)^val(lca( 阅读全文
摘要:
题目:一颗树,单边修改,链上查询。。实际上链是根到结点的链。网上好像有其他做法,我的想法是这样的: 先不看修改,毫无疑问查询只是查询结点的深度;而修改一条边会有什么影响:影响是且只是以边上深度最深结点为根的子树。 所以就是DFS序了。把子树转化为区间,然后用区间修改、单点查询的线段树维护。 1 #i 阅读全文
摘要:
题目,是对一颗树,单点修改、子树查询。典型的dfs序入门题。 DFS序可以将一颗树与子树们表示为一个连续的区间,然后用线段树来维护;感觉算是树链剖分的一种吧,和轻重链剖分不同的是这是对子树进行剖分的。 我用非递归方式求DFS序。 1 #include<cstdio> 2 #include<cstri 阅读全文
摘要:
方法1:两遍最大流。一遍最大流后,把满流边容量+1,非满流边改为INF;再求最小割即为答案。 我大概想了下证明:能构成最小割的边在第一次跑最大流时都满流,然后按那样改变边容量再求一次最小割,就相当于再在那些 满流可能是属于最小割的边 中挑出最少的边形成ST割。 1 #include<cstdio> 阅读全文
摘要:
题目是给一些数和<数对>的下标,然后进行操作:对某个<数对>中的两个数同时除以一个都能被它们整除且不等于1的数,要求的就是最多能进行多少次操作。 除数一定是素数,就是要决定某素数要除哪些<数对>使除的次数最多, ik + jk is an odd number 可以想到这个是个二分图,数最多100个 阅读全文
摘要:
一开始我把每个店主都拆成k个点,然后建图。。然后TLE。。 看题解= =哦,愚钝了,k个商品是独立的,可以分别跑k次最小费用最大流,结果就是k次总和。。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algor 阅读全文
摘要:
人作X部;把门按时间拆点,作Y部;如果某人能在某个时间到达某门则连边。就是个二分图最大匹配。 时间可以二分枚举,或者直接从1枚举时间然后加新边在原来的基础上进行增广。 谨记:时间是个不可忽视的维度。 1 #include<cstdio> 2 #include<cstring> 3 #include< 阅读全文
摘要:
如果只有食物或者饮料那就是个二分图最大匹配。 三个真想不出来。。然后看题解。。从源点到食物到牛到饮料到汇点,这样建图。 所以思维不能太局限了,不懂得把食物和饮料放到牛两边,以为牛吃食物饮料、食物饮料被牛吃是符合逻辑的=。= 1 #include<cstdio> 2 #include<cstring> 阅读全文
摘要:
题目简单吧,如果知道题目要干嘛的话。 每个比赛指定A赢或者B赢使它们赢得次数不超过1赢得次数。建立一个二分图模型,X部比赛,Y部队伍,用最大流求解,如果最后最大流等于比赛场数就有解。 然而我还是掉坑里了。。。我多算了1在同一赛区赢的次数。。 1 #include<cstdio> 2 #include 阅读全文
摘要:
看了题解,自己大概想了下。 最小割唯一的充分必要条件是残量网络中所有点要嘛能从源点floodfill到要嘛能floodfill到汇点。 必要性,这是当然的,因为假设从源点floodfill或者从汇点反着floodfill得到的集合若不相补,那这就有两个最小割的方案,最小割不唯一。 充分性,首先这样就 阅读全文
摘要:
把球当作水。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30) 7 #define MAXN 1111 阅读全文
摘要:
题目求一张图两条边不重复的最短路。 一开始我用费用流做。 源点到1连容量2费用0的边;所有边,连u到v和v到u容量1费用cost的边。 总共最多会增广两次,比较两次求得的费用,然后输出路径。 然而死MLE不过。。 看了题解,是用最大流的做的。 源点到1连容量为2的边;然后把属于最短路的边都加进去,容 阅读全文
摘要:
先Floyd求牛到机器最短距离,然后二分枚举最长的边。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30 阅读全文
摘要:
1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1LL<<60) 7 #define MAXN 3333 8 #d 阅读全文
摘要:
选择若干条线段使权值最大,并且点覆盖次数不超过k。 建图如下:vs到0建立容量为k费用为0的边;坐标终点到vt连接一条容量为k费用为0的边;对于每两个相邻坐标连接一条容量为INF费用为0的边;对于线段每两个端点连接一条容量1费用为-cost的边。 这样跑最小费用最大流。相当于找出k个线段集合,每个集 阅读全文