摘要:
把某点与某几点分开的最小花费,当然想到最小割。具体怎么建图,可以画个简单的情况,然后就清楚了: 0到1不受控制,建立0->1容量为INF的边; 1到0受在0一边的一个控制面板的控制,建立1->0容量为1的边。 1 #include<cstdio> 2 #include<cstring> 3 #inc 阅读全文
摘要:
形象生动的最小割。。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30) 7 #define MAXN 阅读全文
摘要:
看了题解。当时也觉得用邻接矩阵挺好写的,直接memset;然而邻接矩阵不懂得改,于是就放开那个模板,写了Dinic。。 方法是,按字典序枚举每一条满流的边,然后令其容量减1,如果最大流改变了,这条边就是属于某个最小割;接下来一直重复下去,直到得到一个割边集,而它自然是字典序最小的。 我在每次某条边容 阅读全文
摘要:
题目要的并不是最大匹配下得到的最大的结果。 网上流行的做法是加边。其实,在连续增广的时候求得一个可行流的总费用为负就停止这样就行了。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 us 阅读全文
摘要:
这题第一眼就想到暴力。。 枚举每一个ti,就能确定tj,tj一定是剩下数最大或最小的。为了求tj就要求出数列最大最小次大次小。时间复杂度O(n)。 感觉暴力挺有趣的。 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 阅读全文
摘要:
求一次最大流后,分别对所有满流的边的容量+1,然后看是否存在增广路。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF 阅读全文
摘要:
有向连通图存在欧拉回路的充要条件是所有点入度=出度。 首先随便给定所有无向边一个方向(不妨直接是u->v方向),记录所有点的度(记:度=入度-出度)。 这时如果有点的度不等于0,那么就不存在欧拉回路,就需要改变那些无向边的方向。 而改变一个无向边的方向,相当于边上两个端点的入度和出度都变化了1,它们 阅读全文