摘要:
冲着这个智慧的数字"⑨"就值得一写。 T1,区间加,单点查。 打个标记就行了。 1 #include <cstdio> 2 #include <cmath> 3 4 const int N = 50010; 5 6 int le[N], re[N], sum[N], tag[N], a[N], fr 阅读全文
摘要:
LCT新姿势:维护子树信息。 不能带修,子树修改就要toptree了... 题意:动态加边,求子树大小。 解: 维护子树信息只要额外维护虚边连的儿子的信息即可。这里把siz的定义变成子树大小。 哪里会修改虚边呢?link和access。把这两个函数改一改就行了。 注意这里link的时候x和y都要ma 阅读全文
摘要:
LCT新姿势:维护边双连通分量。 题意:给你一张无向图,有加边,改点权操作。 你需要回答的是:从a到b,给每条边任意定向后,能经过的点权之和最大是多少。(每个点只算一次,点权非负)。 可以发现,一个边双连通分量之内的都可以到达。就相当于在缩点后的树上求路径权值和。 使用LCT动态维护:开两个并查集。 阅读全文
摘要:
LCT的一种姿势。 题意:给定一棵树。每次把一条路径上的点染成一种颜色,求一条路径上有多少段颜色。 解: 首先可以很轻易的用树剖解决,只不过代码量让人望而却步... 有一种难以想象的LCT做法... 记录每个点的颜色,修改用lazy tag 询问时把那一条链split出来,pushup的时候看当前点 阅读全文
摘要:
不知道这个Zayid是谁... 题意: 有n个人,m个导师。每个导师能接纳bi个人,每个人对于这m个导师都有一个志愿档次。 优先满足靠前的人,问到最后每个人匹配的导师是他的第几志愿。 每个人又有一个限制si,问至少前进多少名才能被志愿档次不大于si的导师录取。 解: 首先发现,每个志愿档次只能填一个 阅读全文
摘要:
题意:懒得写了...... 解: 一开始想的是每天建点,每种人建点,然后连边费用流,发现一个人可以管辖多天,不好处理。 回想起了网络流24题中的"最长k可重线段集","最长k可重区间集"等问题,然后发现这题也可以横着流啊。 具体来说,首先在下面开一条安全快速绿色通道,存放那些不用的人(流量)。 那么 阅读全文
摘要:
上下界费用流比较无脑,提供一种更巧妙的费用流,无需上下界。 1 #include <cstdio> 2 #include <algorithm> 3 #include <queue> 4 #include <cstring> 5 6 const int N = 1610, M = 1000010, 阅读全文
摘要:
题意:给你一张图,每个节点保护若干节点。 当一个节点不被保护的时候,你就可以gay掉它。 gay每个节点都有收益(可能为负),求最大总收益。 解:首先发现是一个最大权闭合子图。 把保护关系变成被保护,那么gay每个节点就必须gay每个保护它的节点。 然后发现有个小问题:有环。 于是我们tarjan求 阅读全文
摘要:
题意:有n个球队,m场比赛。 每个球队都已经有些胜负场次了。 每个球队的收益为Ci * wini2 - Di * losei2。 求最小可能总收益。 解: 先看出一个模型:用一流量代表一个胜场,每场比赛向两支队伍连边。 然后我们发现这个费用是跟流量的平方有关的,How to do? 先观察一波:1 阅读全文
摘要:
题意:n天内你每天可以s或者e,分别有一定的收益。 每连续k天中s的天数要大于ds,e的天数要大于de,求最大收益。 解:费用流解线性规划。 先假设全部选e,然后一天s的收益为si - ei ai表示第i天是否s,up = k - de, down = ds, R = up - down,有: 两两 阅读全文