随笔分类 - 算法入门经典第二版第十一章 图论模型与算法
摘要:互相可以打电话是一个传递关系,所以Floyd求传递封包,dfs找一个尽量大的圈。#includeusing namespace std;const int maxn = 25;map mp;map::iterator it;vector names;bool d[maxn][maxn];int ID...
阅读全文
摘要:很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(x,y)看出是一条边,边的容量下界是1,所以先减去1,之后在加上就好了。建图的时候注意分配好编号,解从残留网络中的边找。前向星建图的话,打印解会比较麻烦。#includeusing namespace std;const...
阅读全文
摘要:关键在建图,转换器连一条容量无限的边表示可以转化无数次,设备的插头连源点,插座连汇点。dinic手敲已熟练,输出格式又被坑,总结一下,输出空行多case的,一个换行是必要的,最后一个不加空行,有Testcase最后一个不要换行,没有testcase最后一个要加换行,想起那天gold miner PE...
阅读全文
摘要:隐式的图搜索,存不下边,所以只有枚举转移就行了,因为bug的存在状态可以用二进制表示,转移的时候判断合法可以用位运算优化,二进制pre[i][0]表示可以出现的bug,那么u&pre[i][0] == u就表示u是可以出现的bug集合的子集,pre[i][1]表示必须出现的bug,那么u|pre[i...
阅读全文
摘要:先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点。正确性是基于一个贪心,在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少。边比较多,用prim求最小生成树,效果比Kruskal好,枚举套餐的时候在用Kruskal。prim和...
阅读全文
摘要:Kruskal+并查集。点很少,按边权值排序,枚举枚举L和R,并查集检查连通性。一旦连通,那么更新答案。判断连通可以O(1),之前O(n)判的,第一次写的过了,后来T。。#includeusing namespace std;const int maxn = 101;const int maxe =...
阅读全文
摘要:一般来说,把一颗子树离散成一个int,把一个结点的字符离散成一个int会方便处理直接map离散。当然一个结点最多只有4个小写字母,也可以直接编码成一个27进制的整数,舍掉0,为了区分0和0000。需要注意的是有可能只有一个结点。#includeusing namespace std;const in...
阅读全文

浙公网安备 33010602011771号