随笔分类 -  图论

摘要:要先判断是不是二分图。用黑白染色法。 遇到已经染过的跟当前的颜色相同时就说明不是二分图,也即出现了奇环 阅读全文
posted @ 2016-09-01 13:41 Helica 阅读(191) 评论(0) 推荐(0)
摘要:先跑一个二分图匹配,然后一一删去匹配上的边,看能不能达到最大匹配数,不能这条边就是重要边 阅读全文
posted @ 2016-09-01 13:39 Helica 阅读(325) 评论(0) 推荐(0)
摘要:把矩阵上的1建成边,把边建成点 然后跑一个二分图匹配,就找到了主对角线的元素,之后排个序就可以了 阅读全文
posted @ 2016-09-01 13:37 Helica 阅读(173) 评论(0) 推荐(0)
摘要:裸二分图匹配 阅读全文
posted @ 2016-09-01 13:35 Helica 阅读(281) 评论(0) 推荐(0)
摘要:二分图最大权值匹配问题。用KM算法。 最小权值的时候把权值设置成相反数 阅读全文
posted @ 2016-09-01 13:34 Helica 阅读(239) 评论(0) 推荐(0)
摘要:注意POJ数组越界可能返回TLE!!! 网络流的maxn大小要注意 其他没什么了 裸二分答案+isap乱搞 不过复杂度没搞懂 V=1e3 E = 1e5 那ISAP的O(V^2E)怎么算都不行啊 阅读全文
posted @ 2016-09-01 13:32 Helica 阅读(426) 评论(0) 推荐(0)
摘要:bfs的时候用bitset优化一下。 水题 阅读全文
posted @ 2016-08-08 20:03 Helica 阅读(272) 评论(0) 推荐(0)
摘要:此题有多种做法。 使用floyd算法预处理最短路,二分答案,对于每一个mid,如果距离比mid小就连边, 注意把每个机器分成m个点。这样跑一个最大匹配,如果都匹配上就可以减小mid值。 用的算法比较多但是条理很清晰 1 #include <cstdio> 2 #include <cstring> 3 阅读全文
posted @ 2016-03-11 15:26 Helica 阅读(209) 评论(0) 推荐(0)
摘要:裸生成树 #/*--------------------------------------------------------------------------------------*/ // Helica's header // Second Edition // 2015.11.7 // 阅读全文
posted @ 2016-03-11 15:22 Helica 阅读(171) 评论(0) 推荐(0)
摘要:裸最短路 /*--------------------------------------------------------------------------------------*/ // Helica's header // Second Edition // 2015.11.7 // # 阅读全文
posted @ 2016-03-11 15:19 Helica 阅读(252) 评论(0) 推荐(0)
摘要:最优比率环问题。二分答案,对于每一个mid,把节点的happy值归类到边上。 对于每条边,用mid×weight减去happy值,如果不存在负环,说明还可以更大。 1 /*---------------------------------------------------------------- 阅读全文
posted @ 2016-03-06 16:47 Helica 阅读(259) 评论(0) 推荐(0)
摘要:题意:一个N*M的矩阵里有K个观测点,你必须放置天线覆盖所有观测点。每个雷达只能天线两个观测点,这两点必须相邻。计算最少天线数。 做法:将所有相邻的观测点连起来,建图。跑一遍匈牙利算法就计算出了最大的覆盖数,除以二就是天线数。还要加上落单的观测点,每个都需要一个天线。 1 /*----------- 阅读全文
posted @ 2016-03-05 00:32 Helica 阅读(187) 评论(0) 推荐(0)
摘要:题意:经典的二分图匹配问题。给出一个N*N矩阵,其中有K个障碍物。一发歼星炮可以清楚一行或者一列上的障碍物。求最少的开炮数。 做法:可以考虑最大点覆盖。建图左边顶点为行,右边顶点为列。若有障碍物则连边。此时最大点覆盖就是最小开炮数,也就是计算二分图最大匹配。使用匈牙利算法即可。 1 /*------ 阅读全文
posted @ 2016-03-05 00:28 Helica 阅读(201) 评论(0) 推荐(0)
摘要:题意:给出一个图,每个节点都有权值,每条边也有费用。要求建立一颗树,使总花费最小。树上每连一条边的花费定义为孩子节点权值和×此边费用。 做法:分析可知,最终的答案为所有节点的权值×到根节点的距离。可以知道当距离最短时,花费最小。 于是用Dijkstra+优先队列优化就可以搞定了。这题有些卡时间。最后 阅读全文
posted @ 2016-03-05 00:23 Helica 阅读(204) 评论(0) 推荐(0)
摘要:两种货币的交换可以当成两条边,建图后跑Bellman_ford算法就好了。 Bellman_ford算法可以用来处理负边权,所以可以判断是否存在负环。反过来就可以判断是否存在正环。 1 /*------------------------------------------------------- 阅读全文
posted @ 2016-03-05 00:16 Helica 阅读(317) 评论(0) 推荐(0)
摘要:记忆化数组记录从这个点的最长下降序列,然后乘以这个点的度,就是ans,维护即可。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5+10; const 阅读全文
posted @ 2016-02-22 13:30 Helica 阅读(220) 评论(0) 推荐(0)
摘要:裸网络流题。 1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 const int maxn = 1200; 8 const in 阅读全文
posted @ 2016-02-21 16:59 Helica 阅读(461) 评论(0) 推荐(0)
摘要:树上每个元素有一个p,元素之间有距离d,计算一个元素u,使得sigma(d(i,u)*pi)最小。 两次dfs,第一次计算本节点以下的sigma(),第二次利用sump求解出ans。 1 #include <cstdio> 2 #include <algorithm> 3 #include <cst 阅读全文
posted @ 2016-02-21 16:47 Helica 阅读(227) 评论(0) 推荐(0)
摘要:有n个家庭,m个房间,一个房间只能两个家庭住。求最大匹配。 比较标准的二分图问题。先初始化把可能的家庭建边,然后跑一边匈牙利算法。 最后的答案是最大匹配数/2,因为建图时有重复。 #include <cstdio> #include <algorithm> #include <cstring> #i 阅读全文
posted @ 2016-02-17 23:19 Helica 阅读(281) 评论(0) 推荐(0)
摘要:给出一些球,球内的时间为零,球之间的速度为10每单位。给两个点,求最短时间。把每一个球当做点,球间的距离就是floyd的d数组。之后跑一遍floydwa了两发因为d数组定义成int了#include #include #include #include #include #include #incl... 阅读全文
posted @ 2015-10-19 17:06 Helica 阅读(309) 评论(0) 推荐(0)