摘要:
就是模板... 阅读全文
摘要:
点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号。画图就知道u’连v,v’连u。 技巧:不需要枚举S,T。固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)", &u, &v); Scanf中添加 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或 阅读全文
摘要:
题外话:很多混合图问题可以转化为有向图问题(将无向边拆为两条有向边) 本题不行,因为只能经过一次 这种问题能想到网络流。。 复习欧拉回路:入度==出度 和uva1380有点相似,要先给无向边定向。原图为G,定向的边单独组成另一个G’ 定向后对任意点,入度==出度,则有了回路。 否则调整原来的无向边。 阅读全文
摘要:
这里就想到了lrj说的理解EK但是使用Dinic 因为图较大,所以采用Dinic而不是EdmondsKarp 得益于接口一致性,无须理解Dinic就能使用它。 看到最小费用,又有隔开的操作(割),就是最小割,就想到了最大流(想了想用不到MCMF,这里挺需要注意的,所有网络流的题首先判断是MCMF还是 阅读全文
摘要:
证明: 对于每一个X节点,都是只有一个入流,多个出流(分别流向每一个Y节点),显然多个出流的和正好等于入流;同理,对于每一个Y节点,有多个入流(分别来自每一个X节点),只有一个出流,显然多个入流的和等于出流。第一类弧,以每一行所有元素之和为容量;第三类弧,以每一列所有元素之和为容量;第二类弧,最终流 阅读全文
摘要:
拆点法是很套路的方法,将一个点拆为i和i',连边,cap为1,cost为0. 编号:点2~n-1拆成弧i->i',前者编号为0~n-1,后者编号为n~2n-3 (i+n-2) 本题拆点后从1-v求流量为2的最小费用流 while(flow < flow_limit && BellmanFord(s, 阅读全文
摘要:
网络流的问题一般都会加S,T! 网络流init参数一般为节点数(包括S,T) maxn为点数+一点(注意可能加点,拆点...) 把插头看做结点,增加S,T链接设备和插头(容量为1),转换器作为边(容量无穷大),套模板。用的是紫书第二种方法,因为更喜欢思维直接一点的方式。 读取输入时用一个ID函数方便 阅读全文
摘要:
白书第一章例题4 思维。 先固定一点不动,假设最后一共N个点,那么编号为0,1,...N-1, 0不动,原来的n个点分别占据i/n*N的位置(记为pos),移动到pos四舍五入的位置即可。 证明一:有一个坐标未移动,见例题3(UVA11300) 证明二:没有点移动到相同位置。 假设x,y移动到相同位 阅读全文
摘要:
白书第一章例题6 构造。思维。几何。 分别从几个角度去看,有矛盾就删掉,最后遍历一下统计个数 方法证明:第一个方块肯定要删除。假设前k个必须删除,第k+1个矛盾出现,假如不删掉,矛盾将持续存在,故必须删掉。 代码有很多细节。 比如注意宏定义加() //#define REP(i,n) for(int 阅读全文
摘要:
白书第一章例题7 很套路了。枚举第一行,可以直接算出之后的几行。 #include <iostream> using namespace std; #include <stdio.h> #include <cstring> #define INF 10000000 int grid[20][20]; 阅读全文
摘要:
白书第一章例题8 好麻烦! 正方体每面编号为0-5,那么根据顶点和正面,就能确定形态。一共6*4=24种形态。 P[i]表示编号i所在位置。比如P[1]=3,表示第二面转到了第四面。 就可以表示出所有形态。 这时候可以手算或者写个函数找出所有形态。 注意选择函数计算,要放到main外面,方便调。 注 阅读全文
摘要:
习题9-9 注意前提是最小值最大。很少做两次dp的题。 初始化要细心。 阅读全文
摘要:
状压dp 要再看看 例题9-17 阅读全文