UOJ#77. A+B Problem】的更多相关文章

UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i],i向i+n连p[i],然后i+n向之前点连INF就行了 向一段区间连边?果断线段树优化 等等,还要满足\(l_i\le a_j \le r_i\),权值建线段树,然后可持久化! 有一点细节没考虑好,就是之前的可能有x了这次a[i]=x,不需要重复把之前再连一遍,只要新叶子到之前的叶子连INF就行了…
大名鼎鼎的A+B Problem, 主席树优化最小割-- 调题死活调不对,一怒之下改了一种写法交上去A了,但是改写法之后第4,5个点常数变大很多,于是喜提UOJ全站倒数第三 目前还不知道原来的写法为什么是错的,暂时先写一下A掉的那种写法的题解. 题目链接: (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3218 (UOJ) http://uoj.ac/problem/77 题解: 首先不难想到这样的最小割建图: (醒醒吧这种题就别…
竟然在BZOJ上拿了Rank1太给力啦. p.s.:汗,一发这个就被一堆人在2月27号强势打脸-- 传送门(BZOJ) 传送门(UOJ) 说说这道题目吧: 首先是说说这个构图吧.因为有选择关系,我们很容易想到最小割. Ans = sigma(i为白色){w[i]} + sigma(i为黑色){b[i]} - sigma(奇怪的i){p[i]} 转化一下就变成了sigma(所有的i){w[i]+b[i]} - sigma(i为白色){b[i]} -sigma(i为黑色){w[i]} - sigma…
题目名称是吸引你点进来的. 从前有个 n 个方格排成一行,从左至右依此编号为 1,2,⋯,n. 有一天思考熊想给这 n 个方格染上黑白两色. 第 i 个方格上有 6 个属性:ai,bi,wi,li,ri,pi. 如果方格 i 染成黑色就会获得 bi 的好看度. 如果方格 i 染成白色就会获得 wi 的好看度. 但是太多了黑色就不好看了.如果方格 i 是黑色,并且存在一个 j 使得 1≤j<i 且 li≤aj≤ri 且方格 j 为白色,那么方格 i 就被称为奇怪的方格. 如果方格 i 是奇怪的方格…
题目 题目在这里 思路&做法 明显的最小割(其实是之前做过一道类似的题) S向每一个格子连容量为\(b_i\)的边 每一个格子向T连容量为\(w_i\)的边 对于格子\(i\)向满足条件的格子\(j(1 \leq j < i, l_i \leq a_j \leq r_i)\)连容量为\(p_i\)的边 但是考虑到这题恶心的数据范围, 这样做很明显会TLE. 算法的瓶颈在第三步.我们发现\(j\)的范围看起来像是一个像二维偏序的东西, 于是便可以用主席树来优化一下, 对于每个节点\(i\)新建…
传送门 题目描述 略 Sol 看到选择黑白收益不同,然后还可能有代价. 我们想到用网络流解决,并且这应该是用总可能收益-最小割得到答案. 考虑初步建图,发现那个限制可以直接 \(n^2\) 解决. 我一开始是拆了点的,但是这样没有必要,而且可能会出现一个格子黑白两种颜色都不选的情况. 所以就是黑色边从源点连出,然后白色边连到汇点.这样割掉哪条边代表不选这个颜色. 因为对于一个奇怪的格子代价只算一次,所以我们新建一个点代表这个格子变成了一个奇怪的格子. 那么对于编号小于 i 的有限制的点直接从新建…
题面 背景 题目描述 从前有个 n n n 个方格排成一行,从左至右依此编号为 1 , 2 , ⋯ , n 1,2,⋯,n 1,2,⋯,n. 有一天思考熊想给这 n n n 个方格染上黑白两色. 第 i i i 个方格上有 6 6 6 个属性: a i , b i , w i , l i , r i , p i a_i,b_i,w_i,l_i,r_i,p_i ai​,bi​,wi​,li​,ri​,pi​. 如果方格 i i i 染成黑色就会获得 b i b_i bi​ 的好看度. 如果方格 i…
http://uoj.ac/contest/35/problem/246 神奇!我这辈子是想不出这样的算法了. 对区间长度分类讨论:题解很好的~ 我已经弱到爆了,看完题解后还想了一晚上. 题解中"利用\(r_y\)进行计算更新答案"的具体方法是记录以当前点为右端点,任意两个数的差值的最小值大于等于j的区间的左端点,记为\(pos_j\). 就这个问题我想了一晚上啊TWT,我不滚粗谁滚粗QAQ #include<cmath> #include<cstdio> #i…
http://uoj.ac/contest/35/problem/244 对其他人来说好简单的一道题,我当时却不会做TWT 注定滚粗啊 题解很好的~ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int N = 100003; ll in() { ll k = 0, fh = 1; char c= getcha…
http://uoj.ac/contest/25/problem/180 从前往后对比串A,B 当$A_i,B_i$不相同时找到$B_i$在A中的位置j 若$min{A_1,A_2,A_3......A_{j-1}}<A_j$说明$A_j$无法交换到位置i,就GG惹 否则把$A_j$设为INF 线段树维护区间取min,单点修改 #include<cstdio> #include<iostream> #include<algorithm> using std::ci…