图论
文章平均质量分 62
TommyTT
我擦,要挂科了。
展开
-
hdu 4406 费用流
这题问题就是当前时刻到底选择哪门课程,易知选择是和分数有关的,并且是一个变化的权值,所以可以用拆点的方式,把从基础分到100分都拆成点,但若这样拆点的话,跑费用流时就必须保证顺序,这样就麻烦了。。观察公式,发现同一门课,分数越高,权值是越低的,所以这是一个单调的,这样的话就可以对每一个分数建一条边,费用流会一条一条的跑。注意将课程放在X集#include#include#include原创 2014-10-02 14:43:55 · 839 阅读 · 0 评论 -
HDU 4862 Jump 费用流
建图:将所有点拆成两个点原创 2014-07-22 20:01:33 · 753 阅读 · 0 评论 -
HDU 4859 海岸线 最小割
强烈建议阅读一下最小割模型在信息学竞赛中的应用其中2.2.2的Optimal Marks一题和此题建模非常相像。在原图外围虚拟一圈‘D’,我们要最大化的周长,就可以等价为最大化相邻的'D'和'.' 的总对数,也就是最大化相邻格子不同类型的总对数。按照论文中的建图方式,我们可以最小化相邻格子不同类型,反过来想,稍微改变一下建图,就可以最小化相邻格子相同类型建图:将地图奇偶建图原创 2014-07-22 11:35:29 · 1263 阅读 · 0 评论 -
wikioi 1034 家园 动态网络中的时间流(费用流)
由于随着时间的变化,网络中的边会变,所以普通的网络流无法解决这样的问题。假设T时刻全部运完。为此,我们可以基于时间拆点,将所有点拆成T个点,每个点对于下一个时刻的自己都连一条容量为INF边,费用为1的边,意思就是在当前空间站等待1个时刻。每个点对于下一个时刻能到的点,连一条边,容量是这艘太空船的容量,费用是1。源点连0时刻的地球,容量为k,所有的月球连接汇点。费用都为0。每次找原创 2014-06-11 01:37:56 · 1318 阅读 · 0 评论 -
ZOJ3795 Grouping 强连通缩点+图的最长路
给出m条a年龄大于等于b的信息,要求可以比较的两个人不能放在同一组,问最少能分成几组。由于是大于等于,所以原图可能构成强连通分量,意思就是有很多人年龄相同(想想也该知道,总共10w个人,肯定有很多人年龄重复= =!)将原图缩点后,对新图记忆化搜索求最长路。如果不缩点,会RE。。。#include #include#include#include#includeusing na原创 2014-06-30 17:30:47 · 768 阅读 · 0 评论 -
二分图相关题
由于每行最多放一个,每列最多放一个(不能放置的位置不影响攻击,就是因为没注意这句话,把这题当做行列覆盖模型做了好久0.0)所以把行列直接当做二分图X和Y集,可以放置的点的行列连边,求出的完备匹配就是第二个答案。至于第一个答案求关键点,就枚举删除一条边能否任然得到完备匹配,若不行,则是关键点。我的代码c++会WA,不知道为什么,求教啊。#include#include#inclu原创 2014-07-20 23:27:13 · 783 阅读 · 2 评论 -
poj Command Network 最小树形图
规定根节点,求一颗生成树使得权值最小,但由于是有向图,所以最小生成树算法失效。查资料后得知此类问题叫做最小树形图。解决最小树形图问题的朱刘算法,算法核心基于找 最小弧集->找环,消环的思想,来慢慢构造树形图。所有的灵魂都在这张图上。0.0#include#include#include#include#include#includeusing namespace原创 2014-07-20 15:39:43 · 688 阅读 · 0 评论 -
hdu 4612 Warm up 双连通缩点+树的直径
首先双连通缩点建立新图(顺带求原图的总的桥数,其实由于原图是一个强连通图,所以桥就等于缩点后的边)此时得到的图类似树结构,对于新图求一次直径,也就是最长链。我们新建的边就一定是连接这条最长链的首尾,这样就将原图的桥减少了直径个。#include#include#include#include#include#includeusing namespace std;#原创 2014-06-27 18:35:20 · 767 阅读 · 0 评论 -
poj 3678 2-sat
2-sat经典建图,注意AND为1的时候,a=0要和a=1连边,b同理,因为此时a,b都不能为0。OR为0时候,a=1要和a=0连边,b同理,因为此时a,b都不能为1。#include#include#include#include#include#includeusing namespace std;#define maxn 1005vector g[maxn*2];b原创 2014-06-27 09:45:40 · 879 阅读 · 0 评论 -
hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少增加多少条推导,可以使所有命题都能等价(两两都能互推)既给出有向图,最少加多少边,使得原图变成强连通。首先强连通缩点,对于新图,每个点都至少要有一条出去的边和一条进来的边(这样才能保证它能到任意点和任意点都能到它)所以求出新图中入度为0的个数,和出度为0的个数,添加的边就是从出度为0的指向入度为0的。这样还会有一点剩余,剩余的就乱连就行了。所以只要求出原创 2014-06-28 00:07:18 · 910 阅读 · 0 评论 -
poj 2186 有向图的相连通分量
想到了tarjan求强连通分量,但没想到后面该怎么写了。网上的思路很厉害:只要求出所有强连通分量的出度,如果出度为0的只有1个的话,那么那个强连通分量里的点集就是答案。为什么是出度为0只有1个呢?若出度为0的有2个或以上,则这几个强连通分量之间就没有办法连接,显然没有答案。若出度为0的只有1个,则其他强连通分量一定有边指向这个强连通分量,若没有,则一定还有1个强连通分量出度为0。原创 2014-02-21 17:03:58 · 1052 阅读 · 0 评论 -
POJ 3684 Priest John's Busiest Day 2-SAT+输出路径
强连通算法判断是否满足2-sat,然后反向建图,拓扑排序+染色。一种选择是从 起点开始,另一种是终点-持续时间那个点 开始。若2个婚礼的某2种时间线段相交,则有矛盾,建边。容易出错的地方就在于判断线段相交。若s1输出路径的做法可以参考论文2-SAT解法浅析#include #include#include#include#include#include#原创 2014-07-23 15:48:36 · 786 阅读 · 0 评论 -
poj 1815 Friendship 最小割输出最小方案
这题卡了好久啊,最小割模型很容易想,拆点就行。就像poj的Thieves一样每个点 a拆成 a->a',容量为1。其他相连的点 a'->b ,容量为INF源连接s',t连接汇问题在于输出最小的割集更好的方法我还不会,只能枚举。这里基于贪心的思想,从小到大删边,若删除i->i',会使得最小割变小,则输出i,并且i->i'这条边不要恢复若最小割不变,则恢复这条边原创 2014-07-28 10:15:09 · 1356 阅读 · 0 评论 -
UVA 10735 混合图的欧拉回路+输出路径
#include#include#include#include#include#include#include#include#include#include#define eps 1e-12#define INF 0x7fffffff#define maxn 22222using namespace std;int n,m;int en;int st,ed原创 2014-09-26 19:56:28 · 796 阅读 · 0 评论 -
poj 3694 Network 双连通分量
#include#include#include#include#include#includeusing namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define maxn 100005#define maxm 2000005struct node{ int to,vis,n原创 2014-08-27 22:01:34 · 541 阅读 · 0 评论 -
hdu 4966 最小树形图
将每门课等级拆成0,1,2,3...a[i]个点,对每个等级大于0的点向它第一级连边,权值为0【意思是,若修了level k,则level(0~k)都当做修了】将输入的边建边,权值为money[i]。建立根节点,向每个level 0的点连边,权值为0【因为初始level 0的都修了】由于题目要求每门课都必须达到最大level,也就是对应图中根节点能到达所有点,问题就变成了求无向图的最小原创 2014-08-19 20:34:48 · 1110 阅读 · 2 评论 -
ZOJ - 3794 Greedy Driver 最短路
首先正向跑一遍1为起点的最短路,注意松弛过程如果走到加油站则dis=0,并且路上任意时刻dis都不能大于C,判断dis[n]是否然后反向建图再跑一次N为起点的最短路,这样可以求到每个点到n点的最短路。对于每一个可以交易的城市,C-dis1[i]-dis2[i]就是多出来可以卖掉的油。#include#include#include#include#include#includ原创 2014-08-21 09:36:12 · 797 阅读 · 0 评论 -
hdu 4888 Redraw Beautiful Drawings 最大流
好难好难,将行列当成X和Y,源汇点连接各自的X,Y集,容量为行列的和,相当于从源点流向每一行,然后分配流量给每一列,最后流入汇点,这样执意要判断最后是否满流,就知道有没有解,而解就是每一行流向每一列多少流量。关键在于怎么判断多解的情况。我想不到啊T_T题解说,找到一个长度大于2的环。想了一想,也就是找到还有剩余流量的环,如果找到了,我就可以把其中一条边的流量转移,因为是一个环,所以它又原创 2014-07-30 10:58:15 · 911 阅读 · 0 评论 -
poj 3469 Dual Core CPU 网络流最小割,dinic多路增广
吃饭,回来再写。#include#include#include#include#include#include#include#include#include#include#define eps 1e-12#define INF 0x7fffffff#define maxn 22222using namespace std;int n,m;int原创 2014-01-11 17:15:43 · 953 阅读 · 0 评论 -
SPOJ 839 Optimal Marks 最小割 经典 按位建图
胡伯涛论文中的一题,经典建模,由于二进制每一位异或不会相互影响,所以我们把问题转换模型,按位处理。即已知一些点的标号0/1(还有些可以自己任意改),和一些边,边权定义为两端点标号的异或,要求边权和最小的标号方案。我们联想到最小割求的是从源到汇容量最小的边权和。建图:标号为1的和源点相连,容量INF,标号为0的和汇点相连,容量INF,这些边是不能割掉的(这些点标号已经明确)原图相原创 2014-08-03 14:28:43 · 1289 阅读 · 0 评论 -
hdu 3657 Game 最小割
首先经典的奇偶建立二分图(X,Y),对于相邻两点连边2*(X&Y),源->X连边,Y->汇连边,权值w为点权,求最小割。考虑一条路径 源->X->Y->汇若割边选取的是源->X,则表示选Y点不选X点, 答案为w(X+Y)-w(X)若割边选取的是Y->,则表示选X点不选Y点, 答案为w(X+Y)-w(Y)若割边选取的是X->Y,则表示选Y点且选X点, 答案为w(X+Y)-w( 2原创 2014-07-27 09:38:23 · 754 阅读 · 1 评论 -
poj 2723 Get Luffy Out 2-SAT
两个钥匙a,b是一对,隐含矛盾a->!b,b->!a一个门上的两个钥匙a,b,隐含矛盾!a->b,!b->a(看数据不大,我是直接枚举水的,要打开当前门,没选a的话就一定要选b打开,没选b的话,就一定要选a打开)#include#include#include#include#include#includeusing namespace std;#define max原创 2014-06-27 23:22:43 · 592 阅读 · 0 评论 -
hdu 1533 Going Home 最小费用流
建图很简单bfs预处理地图,距离就为费用源点到所有m建边,流量1费用0m到所有H建边,流量1费用为距离H到所有汇点建边,流量1费用0#include#include#include#includeusing namespace std;#define MAXN 10005#define MAXM 1000000#define INF 0x3f3f3f3#defi原创 2014-06-26 10:35:37 · 839 阅读 · 0 评论 -
poj 1698 Alice's Chance 拆点最大流
将星期拆点,符合条件的连边,最后统计汇点流量是否满就行了,注意结点编号。#include#include#include#include#include#include#include#include#include#include#define eps 1e-12#define INF 0x7fffffff#define maxn 1000using原创 2014-06-26 19:41:49 · 734 阅读 · 0 评论 -
poj 2112 Optimal Milking 二分+最大流
>P367页提到的公平分配问题。二分答案ans建模:构造二分图,奶牛看成X集合,挤奶机看错Y集合。1、X和源S连边,边容量为1.2、满足dist(x,y)3、Y和汇T连边,边容量为m.(不能超过挤奶机上限)这样,网络中的流量都是由S——》X——》Y——》T点 ,只有当网络的总流量等于K时,才意味着每一个奶牛都选择了一个挤奶器,也就是一个可行解。通过log(n原创 2014-01-10 15:46:16 · 800 阅读 · 0 评论 -
hdu 1569 &1565 二分图带权最大独立集,最大流最小割定理
此题可以通过奇偶建立二分图,将奇数点集令为X集,偶数点集令为Y集。二分图带权最大独立集:给出一个二分图,每个结点上有一个正权值。要求选出一些点,使得这些点之间没有边相连,且权值最大。(和题目所要求的一样)所以我们可以将X集中与Y集中相邻的点连一条边,这样就构成了一个二分图。用经典的建模方法添加一个源点和X集相连,边容量为点权。添加一个汇点与Y集相连,边容量为点权。将X-原创 2014-01-10 11:31:57 · 1182 阅读 · 0 评论 -
poj 1459 Power Network 最大流,模板题
终于开始网络流了。EK算法很好懂。这道题可以设一个超级源点指向所有普通源点,一个超级汇点被所有汇点指向,然后计算最大流就是答案要求的最大电力。#include#include#include#include#include#include#include#include#include#include#include#include#include#include原创 2014-01-08 19:28:20 · 827 阅读 · 0 评论 -
poj 1330 Nearest Common Ancestors (LCA) tarjan离线算法
LCA问题,利用并查集和dfs寻找最近公共祖先,挺好理解的。tarjan算法#include#include#include#include#includeusing namespace std;#define N 10005bool root[N];int x,y;bool v[N];int set[N],ans[N],n;int num,to[N],head[N]原创 2013-08-24 20:20:18 · 925 阅读 · 0 评论 -
hdu 1269 迷宫城堡 tarjan算法求有向图的强连通分量
学习了一下tarjan。#include #include#include#include#includeusing namespace std;#define MAXN 10005#define MAXM 200005struct node{ int to,next;}edge[MAXM];int head[MAXN],en;int low[MAXN],dfn[MA原创 2013-12-21 17:25:00 · 934 阅读 · 0 评论 -
poj 1201 差分约束+SPFA
poj 1201 差分约束+SPFA原创 2013-07-21 09:49:08 · 847 阅读 · 0 评论 -
poj 3026 Borg Maze bfs建图+最小生成树
poj 3026 Borg Maze bfs建图+最小生成树原创 2013-07-20 12:16:33 · 1619 阅读 · 0 评论 -
hdu 3631 floyd最短路
题意:给定一张图,再给出一系列的操作,0 x表示标记x点,1 x y表示求x,y的最短路(注意,这条路径上的所有点必须都要被标记过)解法:保存地图后,每标记一个点,就对这一个点进行松弛。注意:1、可能有重边,读入的时候要处理一下2、要用longlong存map,inf设为0x3f3f3f3f是不够的#include#include#include#includeusin原创 2013-06-23 13:06:51 · 802 阅读 · 1 评论 -
poj 3615 Cow Hurdles
使最大的权值最小,一看到T的数据有4W多,就能想到答案是之前可以直接出来的。果断floyd思想,只不过每次松弛操作的是两条线路最大权值的最小值#include#includeint n,t;long map[305][305];inline long min(long a,long b){ return a<b?a:b;}inline long max(long a,lon原创 2013-05-22 00:46:39 · 567 阅读 · 0 评论 -
poj 1149 建图+最大流
此题关键问题在于顾客是一个接一个来的,所以早来的顾客选择权越大。下面是建图1、首先将所有顾客和汇点连接,边容量就是顾客需要的猪的数量。这是很容易想到的。2、然后,对于某个猪圈,最先来的人能最先访问它,所以猪圈(源)优先连接先来的人,边容量为猪圈里猪的数目,如果当前猪圈已经被访问过,那么就让上一次访问这个猪圈的顾客和当前顾客连接。可以这样想象,猪优先给,先打开它的人,晚来的人只能拿上原创 2014-01-11 21:12:04 · 813 阅读 · 0 评论 -
poj 2391 Ombrophobic Bovines 二分+拆点建图+最大流
顶点具有容量限制的网络流,建图时可以将点x拆成2个点,a,b,将从x进入的点改成从a进入,从x出去的点改成从b出,然后ab之间连一条INF容量的边,这样就可以直接利用网络流模板了。利用上述建图方法,创建超级源点和超级汇点,二分答案,用最大流判断是否可行。个人觉得这题最坑的地方就在于数据非常大,爆int,建议初始化时,二分上限#include#include#include原创 2014-01-16 18:02:03 · 832 阅读 · 0 评论 -
hdu 4635 强连通缩点
最大的情况是两个点集X,Y,其中X和Y都是完全图,并且X每个点都和Y的每个点相连或者反过来。而我们就是要去找到这两个点集,首先强连通缩点得到新图。对于缩点后的图,如果某个节点既有出度又有入度则肯定不能作为X或Y集合,如果作为了就不能实现XY只有一个方向连接。所以找到只有出度或者只有入度的节点,让它为一个集合,剩下点为另一个集合,这样就是最大的了。#include#include#i原创 2014-02-27 23:00:09 · 835 阅读 · 0 评论 -
ural 1076 Trash 二分图最大权匹配(费用流实现)
统计每种垃圾的总和,若将K种垃圾倒入第F个垃圾桶,那么花费就是K-F(k) (自己已经有的垃圾不用倒)。然后就是简单的二分图建图。#include#include#include#includeusing namespace std;#define MAXN 1000#define MAXM 1000000#define INF 0x3f3f3f3fstruct原创 2014-06-26 11:27:16 · 961 阅读 · 0 评论 -
UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
题目要求一个最大的弱联通图。首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构。对新图进行记忆化dp,求一条权值最长的链,每个点的权值就是当前强连通分量点的个数。/*Tarjan算法求有向图的强连通分量set记录了强连通分量Col记录了强连通分量的个数。*/#include #include#include#include#includeusin原创 2014-06-26 16:09:53 · 628 阅读 · 0 评论 -
zoj 3760 Treasure Hunting 最大独立集
首先根据x^y的奇偶将图分成X,Y集合,然后若对任意 x,y ,不满足gcd的条件,既连边,求最大独立集即可 【最大独立集=总权值-最小点覆盖(最大流)】。为什么可以这样分成二分图,因为奇数和奇数,或者偶数和偶数异或的时候,二进制第一位一定是0,也就是一定是偶数,题目告诉了我们P一定是偶数,所以它们和P一定至少有一个公约数2,所以它们一定没有边(我们是以不满足条件建边的)。最大独立集的原创 2014-04-25 20:19:50 · 944 阅读 · 0 评论 -
ZOJ 3642 最大流
题目很像是有上下界的,因为限定了每个小孩最少分享的信息。后来听YYD大神的解释是,也许一个人可以多次分享同一个,所以下界可以无视。如果是这样,题目就好办了。首先源点向所有人连边,如果不是要求的那个人,边容量就设为他的上界,如果是要求的那个人,边容量就设为无穷,因为他的所有信息都不需要别人共享。人向自己有的信息连边,容量为1信息连向汇点,容量为1.#include#incl原创 2014-05-16 13:54:06 · 859 阅读 · 0 评论