摘要: 【最大流】Dinic ★推荐:Dinic入门。 本质:网络流本质上是为了解决一类取舍问题,这类取舍问题无法得知最优策略的模式(无法DP),因此通过构造一些带容量的路径表示原题目容量,模拟水流在这些容量之间的取舍,从而可以利用网络流来解决取舍问题。 Dinic算法:bfs得到分层图,然后严格按照分层图 阅读全文
posted @ 2017-03-03 14:25 ONION_CYC 阅读(4260) 评论(5) 推荐(1) 编辑
摘要: 【算法】网络流-最大流+最小费用最大流(费用流) 【题解】 第一问跑最大流。 第二问: 原始边相当于费用为0的边,再原图(跑过最大流的图)基础上添加带费用的边,容量为k(相当于inf)。 第一问最大流使用了哪条边对第二问没有影响,因为费用流肯定优先往费用为0的边(原始边)跑。 限流k?添加超级源向1 阅读全文
posted @ 2017-03-01 23:02 ONION_CYC 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 【算法】网络流-最小费用最大流(费用流) 【题解】与方格取数2类似 在S后添加辅助点S_,限流k 每条边不能重复走,限流1 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int in 阅读全文
posted @ 2017-02-27 22:08 ONION_CYC 阅读(403) 评论(0) 推荐(1) 编辑
摘要: 【算法】最小费用最大流(费用流) 【题解】 费用流:http://www.cnblogs.com/onioncyc/p/6496532.html 本题构图: 在有限的k次行走中尽可能多的拿到数字,明显的取舍问题,可以用网络流解决。 一共只有k次行走,因此流量至多为k。 而在起点到终点的所有最大流应该 阅读全文
posted @ 2017-02-26 21:09 ONION_CYC 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 【算法】网络流-最大流(dinic) 【题解】 飞船有可承载人数限制,地球为源点,月球为汇点,人像水流一样从以飞船上限为容量的边流向汇点。 人在各站点都面临着上船与否的选择,难以用DP解决最优策略,于是这样的取舍问题可以使用网络流。 其实主要是看数据范围。 构图思路: 由于我们要计算时间,所以使变量 阅读全文
posted @ 2017-02-23 21:51 ONION_CYC 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 【算法】网络流-最大流(dinic) 【题解】 构图思路: 因为石柱高度是可以被消耗的,即一根石柱可通过的蜥蜴数量有限,取舍问题中这样表示容量的属性显然可以作为网络流中的边。 于是将一根石柱拆成顶部和底部,中间连一条容量为石柱高度的边。 超级源向有蜥蜴的石柱顶连一条容量为1的边(表示一只蜥蜴)。 可 阅读全文
posted @ 2017-02-22 22:01 ONION_CYC 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 【算法】网络流-最大流(dinic) 【题解】http://www.cnblogs.com/onioncyc/p/6496532.html #include<cstdio> #include<algorithm> #include<cstring> using namespace std; cons 阅读全文
posted @ 2017-02-20 21:37 ONION_CYC 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 【算法】多重背包(有限背包) 动态规划 【题解】http://blog.csdn.net/acdreamers/article/details/8563283 优化:若物品数量(num[i])*物品重量(w[i])>背包容量(m),就相当于 阅读全文
posted @ 2017-02-15 18:48 ONION_CYC 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 【算法】树的直径 memset(a,0,sizeof(a)) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=10010; struct edge{int from, 阅读全文
posted @ 2017-02-14 21:17 ONION_CYC 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 【算法】树链剖分+线段树 【题解】线段树的区间加值和区间覆盖操作不能同时存在,只能存在一个。 修改:从根节点跑到目标区域路上的标记全部下传,打完标记再上传回根节点(有变动才需要上传)。 询问:访问到目标区域路上的标记全部下传。 我写的线段树版本是在打标记的同时便对该点的询问项(最大值)做了对应更改, 阅读全文
posted @ 2017-02-14 19:46 ONION_CYC 阅读(212) 评论(0) 推荐(1) 编辑
摘要: 【算法】平衡树(treap)||双向链表 【题解】treap知识见数据结构。 #include<cstdio> #include<algorithm> #include<ctime> using namespace std; const int maxn=100010,inf=0x3f3f3f3f; 阅读全文
posted @ 2017-02-10 20:23 ONION_CYC 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 【算法】平衡树(treap) 【题解】 treap知识见数据结构。 解法,具体细节见程序。 #include<cstdio> #include<algorithm> #include<ctime> using namespace std; const int maxn=100010; struct 阅读全文
posted @ 2017-02-08 21:28 ONION_CYC 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 【算法】平衡树(treap) 【题解】treap知识见数据结构 在POJ把语言从G++换成C++就过了……??? #include<cstdio> #include<algorithm> #include<ctime> using namespace std; const int maxn=5001 阅读全文
posted @ 2017-02-07 21:37 ONION_CYC 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 【算法】离散化 【题解】 答案一定存在于区间的左右端点、与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化)。 让某个点的前缀和表示该点的答案。 初始sum=∑c[i] 在l[i]处加上a[i]-c[i],在r[i]+1处加上b[i]-a[i]。 从左到右计算sum并比较出最大值 阅读全文
posted @ 2017-01-22 16:19 ONION_CYC 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 【算法】数学 【题解】 其实就是求中位数,奇数个点就是最中间的点,偶数个点就是最中间两个点和它们之间的区域皆可(所以偶数不必取到两点正中央,取两点任意一点即可)。 我们可以想象现在x轴上有n个点,我们设定的目标点在最左边,那么可以算出距离总和ans。 目标点往右移动1,相当于ans+左边点数-右边点 阅读全文
posted @ 2017-01-18 11:04 ONION_CYC 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 【题意】将n划分成不同正整数的和的方案数。 【算法】动态规划 【题解】 暴力:f[i][j]:只用前1..i的数字,总和为j的方案数 本质上是01背包,前i个物体,总质量为j的方案数 f[i][j]=f[i-1][j]+f[i-1][j-i] 复杂度O(n^2) 优化: 我们发现,因为要求数字不同, 阅读全文
posted @ 2017-01-18 10:57 ONION_CYC 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 【算法】DP 【题解】f1[i]表示第i棵树当前高度能得到的最多果子数 f2[i]表示高度i能得到的最多果子数。 于是有: f1[j]=max(f1[j],f2[i+delta])+mp[j][i]; f2[i]=max(f2[i],f1[j]); 注意i+delta的范围。 #include<cs 阅读全文
posted @ 2017-01-03 13:48 ONION_CYC 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 【题意】w组数据,给定n和m,给出m段区间[s,t](1<=s<=t<=n)的数字和,求是否矛盾。n<100,m<1000,w<100。 【算法】带权并查集 【题解】由于存在负数,唯一判断信息合法性的途径只有多个已知区间能组成一个已知大区间。 假设有n+1个点0~n表示sum[0]~sum[n],对 阅读全文
posted @ 2016-12-29 20:51 ONION_CYC 阅读(683) 评论(0) 推荐(1) 编辑
摘要: 【算法】可并堆(左偏树) #include<cstdio> #include<algorithm> using namespace std; const int maxn=1000010; int l[maxn],r[maxn],fa[maxn],d[maxn],a[maxn],n,m; bool 阅读全文
posted @ 2016-12-28 19:21 ONION_CYC 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 【算法】贪心+堆 #include<cstdio> #include<algorithm> using namespace std; const int maxn=20010; int n,heap[maxn],sz; void heap_push(int x) { heap[++sz]=x;//新 阅读全文
posted @ 2016-12-22 21:05 ONION_CYC 阅读(297) 评论(0) 推荐(0) 编辑