图论
文章平均质量分 72
Weiguang_123
这个作者很懒,什么都没留下…
展开
-
poj 2987(最大权闭合图)最小割求解:关键是思路
同样看了别人的思路,自己写代码。转)题目描述:给你两个整数n和m。表示公司要开除n个员工,员工之间的关系有m个。然后给你n个数字,可正可负。表示开除这个员工所得到(正)或损失(负)的利益。m 个关系 a b表示b员工是a员工的下属。条件:如果开除一个员工,那么必须要开除他的下属,具有传递性(即也要开除下属的下属)。问你公司原创 2012-07-24 01:23:12 · 1677 阅读 · 0 评论 -
poj 3686(最小费用最大流来搞KM算法:建图还是挺难想到的)
题目链接:点击打开链接【题意】有N个订单和M个机器,给出第i个订单在第j个机器完成的时间Mij,每台机器同一时刻只能处理一个订单,机器必须完整地完成一个订单后才能接着完成下一个订单。问N个订单完成时间的平均值最少为多少。【解答】 假设某个机器处理了k个玩具,那么对于这些玩具,有两种时间,一种是真正处理的时间,一种是等待的时间,等待的时间就是之前所原创 2012-08-18 22:21:21 · 4633 阅读 · 2 评论 -
无向图的割边,双连通||有向图的强连通,割边
有向图:void tarjan(int u) { dfn[u]=low[u]=tmp; tmp++; vis[u]=1; mystack.push(u); for(int i=0;i<mp[u].size();i++) { int v=mp[u][i]; if(!dfn[v]) {原创 2012-08-29 14:41:39 · 2015 阅读 · 0 评论 -
hdu(4005)floyd
给出没两点之间的最短距离,问合法还是不合法,合法请输出原图中最少加的边数。#include #include #include #define MAXN 110int Q[MAXN][MAXN];unsigned char flag[MAXN][MAXN];enum boolean { FALSE,TRUE};int N;int main(){ int T,CE;原创 2012-08-29 16:26:02 · 619 阅读 · 0 评论 -
poj 3275
题目大意:FJ想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序。首先把问题解释清楚,这里的“调查多少对关系”是不看中间结果的。也就是说,调查完确定的某些关系之后,无论结果是什么,排序原创 2012-08-30 16:17:55 · 1378 阅读 · 0 评论 -
netflow
浅谈网络流的基本算法 [转] 引言 过去听起来高深莫测的网络流算法,现在已飞入寻常百姓家了,对于每一个OIER,网络流是一个神圣的东西(个人见解),但神圣的同时,它并不是那样抽象,最形象的模型就是水流,从长江源点无限的向外流水,而大海(汇点)则在不断地‘喝水’,当然,你也可以不把它想成水,或者是其他一切可以流动的东西。而事实上,有些东西的流动比较流畅,而某些东转载 2012-08-31 16:43:26 · 1803 阅读 · 1 评论 -
poj (3074:数独)Dancing Link算法神模版
http://www.ocf.berkeley.edu/ jchu/publicportal/sudoku/0011047.pdf题意:玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。/*DLX解决9*9的数独问题,转化为729*324的精确覆盖问题行:一共9 * 9 * 9 == 729行。一共9 *原创 2012-09-02 17:04:22 · 4700 阅读 · 0 评论 -
hdu (4396:多校第十场):又见spfa求各种状态的最短路
本题题意:为找到至少走K条边的最短路。#include #include #include #include #include #include #include #include #include #include #define inf 1<<30using namespace std;const int N=5050;struct Node{ int v原创 2012-08-24 13:26:31 · 867 阅读 · 0 评论 -
poj (3343)二分匹配+二分
题意:n个人类星球和m个外星人星球,每个星球(包括外星人的)都有一个初始的飞船数sh1[i],还有一个每年生产的飞船数p[i],还有一个n*m的矩阵d,d[i,j]表示从人类星球i到外星人星球j的年数(..年啊),当一个人类星球i可以击败一个外星人星球j的唯一条件是在出发年数ye,(ye-d[i,j])*p[i]+sh1[i]>=ye*p[j]+sh1[j] 的时候,人类星球i可以击败外星球j原创 2012-08-26 12:00:22 · 753 阅读 · 0 评论 -
poj 3439(dij最短路)
题意太、蛋了。。。。给你一个服务器,服务器有两条电线,电线长度给你了,墙上有好多个插座,问你从插座A移动到插座B最少要几步(移动的时候,服务器不能断电,也就是,至少有一条电线连着插座,服务器可以任意动)。#include #include #include #include #include #include #include #include #inclu原创 2012-08-26 14:16:53 · 796 阅读 · 0 评论 -
多校第三场:hdu4324(判三角形的有向环)
题意:在图中找三角形的有向环。先选出一部分的边建一棵树,判断剩下的边加进去是否出现环。#include #include #include #include using namespace std;const int M=2005;struct NN{ int v; int vis;};vectoredge[M];int fa[M原创 2012-08-01 14:09:45 · 1323 阅读 · 0 评论 -
金华邀请赛B题poj 4046(spfa求最短路)
题目大意:给定一个无向图,边上有权值,顶点也有权值。有q次询问,每次询问两个顶点,求这两个顶点之间(的路加上这条路上的最大的顶点权值)的最小值。思路:枚举点,然后求该点到a,b的最小距离。spfa的期望复杂度是O(ke),k一般在2左右,然后,就可以在这道题目大显身手了,这题时限非常紧,一般都是几千毫秒过的,时限只给了5000MS。所以,裸的spfa和暴力询问还是会超时。关键方程:(sta原创 2012-08-15 11:50:10 · 2577 阅读 · 0 评论 -
多小第一场:hdu:4305(矩阵求生成树的个数+乘法逆元)
题目模型:给定平面上N个点。如果两点距离小于等于R,且两点间线段上没有其他点的时候,两点可以建立一条边。得到这个图后,求此图的生成树个数 mod 10007,如果图不连通则输出-1. 第一部分:构图。枚举两点是否符合距离限制,如果符合则对比此两点方向向量上是否有距离更小的其他点,然后根据情况建边删边。(O(N*N*log(N))) 第二部分:如果图连通,则根据生成树定理原创 2012-07-23 14:18:36 · 3191 阅读 · 0 评论 -
poj 1637(求混合图的欧拉回路是否存在:构造网络流求解)
思路是别人的,代码是自己的,自己的模版题。1 定义欧拉通路 (Euler tour)——通过图中每条边一次且仅一次,并且过每一顶点的通路。欧拉回路 (Euler circuit)——通过图中每条边一次且仅一次,并且过每一顶点的回路。欧拉图——存在欧拉回路的图。2 无向图是否具有欧拉通路或回路的判定G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点原创 2012-07-23 15:53:45 · 5642 阅读 · 0 评论 -
多校第一场:hdu4309(最大流+枚举)
题意: n个点,每个点有初始的值 ,三种 通道,1、隧道:可以用来躲避,有固定的容量,也可以用来传递。2、普通的道路,可以无限的通过。3、桥:不花费的话能通过一人,修之后可以无限通过。问最少花费最大可以隐藏人数。 可以建立最大流模型来求解,增加一个源点S,和一个汇点T。S向每个有人的点,连一条容量为人数的边,图中普通的u->v的有向边,连一条u->v的流量为无穷的边,桥的流量则为1。原创 2012-07-21 15:02:54 · 784 阅读 · 0 评论 -
POJ 1639(K度限制的生成树)
题目大意是:矮人虽小却喜欢乘坐巨大的轿车,轿车大到可以装下无论多少矮人。某天,N(N≤5000)个矮人打算到野外聚餐。为了集中到聚餐地点,矮人A要么开车到矮人B家中,留下自己的轿车在矮人B家,然后乘坐B的轿车同行;要么直接开车到聚餐地点,并将车停放在聚餐地。虽然矮人的家很大,可以停放无数量轿车,但是聚餐地点却最多只能停放K辆轿车。现在给你一张加权无向图,它描述了N个矮人的家和聚餐地点,要你求出转载 2012-08-09 10:23:22 · 1872 阅读 · 0 评论 -
poj 2185(流的最小费用的充要条件)消负圈
【题意】:一个城市有n座建筑物,每个建筑物里面有一些人,为了在战争爆发时这些人都可以避难,城市里面建了m座避难所。每座避难所只能容纳有限人数。给出每个建筑物和避难所的坐标(题目要求距离为曼哈顿距离+1)。现在给你一种避难方案,问这种方案是否为最优方案,如果不是,请输出一种比当前更优的方案(不一定最优)。【题解】:好明显的费用流(距离看成费用),如果此题建费用流模型找最小费用流必定超时,而且原创 2012-08-08 20:03:34 · 1378 阅读 · 0 评论 -
poj (3155)最大密度子图(搞懂了思路,悲剧)
题意简述:一个公司有n个人,给出了一些有冲突的人的对数(u,v),所有为了公司更好的发展,公司的总裁决定裁人,那么总裁现在裁要裁掉冲突率最高的哪些(冲突率=人数/在这些人中存在的冲突数分析: 很明显的一个求最大密度子图的题目,求最大密度子图的方法有两种不同的模型可以求解,一种是采用了转换为最大权闭合图的模型来求解,而另一种则是通过补集转换的思想来求解,现在就最大权闭合图的模型来谈论以下:设ma转载 2012-07-26 00:23:40 · 2044 阅读 · 0 评论 -
poj 2284(欧拉公式的推广:线段分平面成几个区域:n+m-r==2)
欧拉公式:如果G是一个阶为n,边数为m 且含有R个区域的联通平面图,则恒有等式:n-m+R==2;推广:具有k 个联通分支的平面图G,有: n-m+R==k+1其中n,m,r,分别为阶数,边数,和区域数。回到题目:给出一些点 ,首尾相连,求分成的区域数 #include#include#include#define inf 0xffffff#include#原创 2012-08-10 20:50:35 · 4738 阅读 · 0 评论 -
zoj 3630(tajan)求强连通分量的个数
#include#include#include #include #include #include#include using namespace std;const int nMax=300;const int mMax=9000005;int n,m;vectormp[nMax];stackmystack;bool cmp(int a,i原创 2012-08-13 14:05:49 · 2090 阅读 · 0 评论 -
hdu:4360(spfa)求各种状态的最短路
题意:每条边除了有边权以外,还有一个字母标记。标记可以是“LOVE”里面任意字符。思路:这题是最短路的变形,用spfa需要记录一下到达这点时,有“LOVE”这四个字母结尾的四种状态,记录每一个状态的最短路,当最短路相等时选love最多的。这题找下一个点时需要两个字母是连在一块的#include #include #include #include #include #includ原创 2012-08-15 11:02:21 · 829 阅读 · 0 评论 -
poj 1275(约束差分求解:汇总)
有是一道差分约束题,虽然啊以前看过,但不是很了解,现在明白了。转:对于差分约束系统的一个资料参考:1) 建图后求最短路(对应 从求最短路后分析开始。求最短路后一定有:d(u) + w(u,v) >= d(v) 转换为:d(v) – d(u) 所以得到建图的规则为:一条b到a的边权值为c。建图后求最短路即为一组解。2) 建图后求最长路(对应 >= 的差分约束)同上。求原创 2012-09-04 16:09:23 · 780 阅读 · 0 评论 -
poj 2337(欧拉回路的最小子字典序)
C++语言: poj 2337 并查集+欧拉通路+贪心思维+dfs#include #include #include #include #include #include #include using namespace std;#define mset(x) (memset(x,0,sizeof(x)))#define MAXN 26struct node{ i原创 2012-09-05 16:26:46 · 3366 阅读 · 0 评论 -
hdu 4313(kruskal思想)
对于有n个结点的树,容易证明删除任意的k (k贪心算法:类似kruskal最小生成树的过程,不过此处将边按权值从大到小排列,每次将边加进来时要判断是否会使两个危险的点连通,是的话这条边就是需要被删除的,否则将它加到树上。#include#include#includeusing namespace std;int ac[110000],father[110000];__i原创 2012-10-23 10:29:11 · 554 阅读 · 0 评论 -
hdu(4435)天津现场赛
题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限,但是汽车油箱有上限d(加满油可以跑距离d)。分析:突破口在于在i号点建立加油站的费用为2^i,这样特殊的花费会使得我们有一个贪心的规律,就是尽量不转载 2012-10-27 22:22:16 · 1074 阅读 · 0 评论 -
2012年ACM长春现场赛B题 2-sat
大致题意:给出下面一段代码很明显这段代码是用a[n]数组来计算出b[n][n]。void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i原创 2012-10-15 11:19:02 · 2028 阅读 · 0 评论 -
2-sat总结
2 – SAT2 – SAT 就是2判定性问题,是一种特殊的逻辑判定问题。例,n对东西,每对只能选一个(i0或i1),不能不选。即:A or _A = 1 , A xor _A = 1还存在一些约束关系(i0,j0),表示i0不能跟j0一起选。那需连边i0-> j1 如果选i0的话必须选j1j0-> i1如果选j0的话必须选i1表示了一种递推的关系:选哪个必选哪一个一般转载 2012-07-12 22:51:08 · 648 阅读 · 0 评论 -
poj 2723(2-sat+二分答案)
题意:m个门,每个门上有两把锁,打开一个就可以通过 2n个钥匙,每两个绑在一起,只能选用一个 ,选了一个,另一个就被废弃。 问最多可以通过几扇门? 2-sat问题关键在建图,2-sat对每个事物都有两个选项 ,选和不选. 可以这么建: 每把钥匙有两个状态(用或不用),把这作为2-sat的两个选项 然后是加条件,a、b绑在一原创 2012-07-12 22:27:07 · 1609 阅读 · 0 评论 -
poj 3207(2-sat判断)
扯蛋的题意:平面上有一个圆,圆的边上按顺时针放着0..n-1共n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只能连一条边。问是否可以连接这m条边,使这些边都不相交。 把边看成2-sat,因为每一条边只有两种状态,在圆内和园外两种可能,这样就满足了2-sat状态了。每两条ab和cd边可能相交情况为: (c<a &原创 2012-07-12 17:12:53 · 1194 阅读 · 0 评论 -
poj 3678(2-sat入门)
我的第一道2-cat题2-cat问题解答:http://wenku.baidu.com/view/31fd7200bed5b9f3f90f1ce2.htmlhttp://hi.baidu.com/godforbidyy/blog/item/40efcc33e3bfc409eac4af4f.html转:(2-cat解题技巧)1.构图(重点+难点)2.求图的极大强连通子图 (模板)原创 2012-07-11 02:19:52 · 921 阅读 · 1 评论 -
2-sat(2011年成都现场赛)
/*在2-sat中,i和j冲突,连两条有向边i-->j',j-->i'。那么当i和j要求不同时,如果i和j相同,就表示i和j冲突,连两条有向边i-->j',j-->i'。那么当i和j要求相同时,如果i和j不同,就表示i和j冲突,连两条有向边i-->j',j-->i'。求强连通分量,如果i和i'在同一SCC中,则无解,输出no,否则输出yes。*/#include#inc原创 2012-09-07 13:04:41 · 798 阅读 · 0 评论 -
poj 3684(2-sat解输出)拓扑+染色
http://blog.csdn.net/sdj222555/article/details/7718821回头再看看,还不是很理解,染色转:这题的题意稍不留神就会看错,注意那个keep ...from 是啥意思所以新娘看不见本排的情况,只能看见对面,要求不能看见不正常关系的一对。并且夫妇不能同时坐在一边。很明显的模型了,由于新娘看的是对面的情况,所以就需要对新娘对面的人来分析转载 2012-07-12 13:22:53 · 799 阅读 · 0 评论 -
hdu 4307(dinic)精简版
从本质上讲,之所以能够用最大流解决这个问题,关键在于最大流可以求解下面这个函数的最小值:接下来就分析一下如何用最大流求解上面这个函数的极值。首先xi一共只有两种选择,那么最终可以按xi的取值将xi划分成两个集合,那么如果xi在值为1的集合里,xj在值为0的集合里,那么就会产生一个代价cij。同时如果xi选择0就会产生一个bi的代价,如果xi选择1就会产生一个ai的代价。于是构造一个原创 2012-10-16 15:15:02 · 1713 阅读 · 1 评论 -
hdu 3938(离线的并查集)
题意描述:简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!分析:因为考虑到数据的大小所以需采用离线算法先计算出结果后在统一输出结果!这里首先要从a到b的所有路径中筛选出这样一条路径(路径中的最长边是所有路径中最小),那么这就需要采用最小生成树kruskal的思想,那么任意两个集合A,B之间可以形成的路原创 2012-10-13 13:37:53 · 2373 阅读 · 0 评论 -
poj 3311(状态压缩DP的最短路径)
题意:给一个起点和终点相同的图,一个矩阵表示各个点之间的距离,求经过所有的点,回到原点的最下路径,点可以重复走。#include #include #include #include #define inf 100000000using namespace std;const int N=12;const int M=1e5;int dis[N][N];int dp[M][N原创 2012-08-26 10:17:44 · 1941 阅读 · 0 评论 -
最小树形图 模板(poj3164)
链接:http://hi.baidu.com/bin183/blog/item/45c37950ece4475f1138c273.html有固定根的最小树形图求法O(VE):首先消除自环,显然自环不在最小树形图中。然后判定是否存在最小树形图,以根为起点DFS一遍即可。之后进行以下步骤。设cost为最小树形图总权值。0.置cost=0。1.求最短弧集合Ao (一条弧就是一条有原创 2012-08-26 21:28:26 · 2011 阅读 · 0 评论 -
hdu(4009)最小树形图自己建立root
题意:有n个地方需要供水,每个地方都可以选择是自己挖井,还是从别的地方引水,根据方法不同和每个地方的坐标不同,花费也不同,现在给出每个地方的坐标,花费的计算方法,以及每个地方可以给哪些地方供水(即对方可以从这里引水),求给所有地方供水的最小花费。思路:建立一个源点,到每个点的距离为自己打井的费用,其他的按条件建边。根据poj3164改过来的。#include #include #i原创 2012-08-28 13:24:25 · 575 阅读 · 0 评论 -
poj 2699(最大流dinic终极模版)
题意:有N个参赛者,两两比赛,赢一场比赛得一分,得分最高的为king,此外,如果一名参赛者比赛中打败了所有得分比他高的参赛者,那么他也是一个king.....题目给出一个非递减的得分序列,表示这N个参赛者的得分情况,按照比赛的得分结果,求最多可能有多少个king.思路: 以每名参赛者和每场比赛都为一点,所有参赛者的点连接源点,容量为各个分数,所有比赛连接一汇点,容量为1;然后从原创 2012-09-28 20:43:27 · 855 阅读 · 0 评论 -
最大流dinic总结模版
const int N=550;const int M=300000;const int inf=1<<30;//******************************************//struct Node{ int v,next; int val;}edge[M];int level[N];//顶点的层次int head[原创 2012-09-28 20:57:27 · 685 阅读 · 0 评论 -
bnu 12870(离散图的floyd)
将塔的高度离散化。#include#include#include#include#include#include#includeusing namespace std;const int N=630;const int inf=599999999;int n,f,m,q;int dis[N][N];map,int>myh;vectore原创 2012-10-06 12:12:00 · 474 阅读 · 0 评论