图论
文章平均质量分 61
巴黎没有欧莱雅你也不值得被拥有
发现自己近来好懒,好久没沉淀芝士了
展开
-
poj1364King_差分约束系统
题目链接题意:现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}现在给出一个不等式,使得ai+a(i+1)+a(i+2)+...+a(i+n)ki首先给出两个数分别代表S序列有多少个,有多少个不等式不等式可以这样描述给出四个参数第一个数i可以代表序列的第几项,然后给出n,这样前面两个数就可以描述为ai+a(i+1)+...a(i+n),即从i到原创 2017-04-26 14:56:34 · 299 阅读 · 1 评论 -
n阶完全树
任意两个vertex之间都有edge连接。但是不包含到自身的连接。无向图的n阶完全图有n(n-1)/2条边有向图的n阶完全图有n(n-1)条边成树是原图的极小连通子图,包含原图所有n个节点,并且保持图连通的同时,边最少。一个有n个顶点的完全图其生成树有n-1条边。ayley公式是说,一个完全图K_n有n^(n-2)棵生成树,换句话说n个节点的带标号的无根树有n^(n-2)个。原创 2017-05-04 20:37:17 · 3591 阅读 · 0 评论 -
nyoj120校园网络_强连通问题
题目链接还是不仔细!在poj上做过原题,这题只是简单的加了个多组数据,朋友帮助下,终于找到了错误点~可以看原题#include#include#include#includeusing namespace std;#define min(a,b) a<b?a:b#define max(a,b) a>b?a:bint Belong[105];int Bcnt,time,原创 2017-05-04 20:15:17 · 324 阅读 · 0 评论 -
poj2186Popular Cows_ 强连通分支_缩点tarjan算法
题目链接 题意: 每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。 先用tarjan求出每个强连通分量,再缩点,统计每个点的出度,如果有原创 2017-04-23 17:26:23 · 272 阅读 · 0 评论 -
poj1236Network of Schools_强连通分量缩点(tarjan算法解决)
poj1236题目链接题目大意:有N个学校,从每个学校都能从一个单向网络到另外一个学校,两个问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2:至少需要添加几条边,使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。(就是最少加入几条边,让这个图变成强连通图)解题思路:首先找连通分量,然后看连通分量的入度为0点的总数,出原创 2017-04-24 14:43:35 · 375 阅读 · 0 评论 -
NYOJ115城市平乱_单源点最短路径(spfa)
题目链接第一次敲的时候我用的是vector,看题的时候心里还在想着要判重边,把代码都敲完后发现了问题,用vector没办法判断重边啊~又把数据结构赶紧改成了邻接矩阵,同时也发现了自己容易犯的错误!学了新东西就只用新的,不善于思考两者的优劣势,(工欲善其事必先利其器)这句话自己没做到!!真是大忌啊!!!还有一点就是今天学会了怎么去计算是否超内存了!这一点对于我做题时候选择数据结构时非常有用原创 2017-05-04 16:44:20 · 420 阅读 · 0 评论 -
NYOJ42一笔画问题_欧拉图(记录节点度数+深搜)
题目链接一笔画成问题类“七桥问题”每条边走一次,这题是可以回到原点也可以不回到原点。首先要确定是一个无向图,因为一笔画成没有规定一一定要从哪个点或者边开始。关于欧拉图的理解可以参考下:知识点对了,首先要先判断这个图的连通性!继而才有可能是欧拉图~我用的深搜判断图的连通性,可以用并查集#include#include#includeusing namespace std;原创 2017-05-04 15:09:52 · 764 阅读 · 0 评论 -
二分图最大匹配
代码实现是通过(连锁反应)实现的,也叫增广路,每次发现一次增广路配对数就加1.增广路本质就是一条路径的起点和终点都是未被配对的点。如果)前匹配方案下再也找不到增广路,(继续对剩下没有被匹配的点一一进行配对,直到所有的点都尝试完毕,找不到新的增广路为止/*input: 6 51 41 52 52 63 4output: 3*/#includeint e[101][1原创 2017-04-15 17:03:00 · 443 阅读 · 0 评论 -
poj3041_匈牙利算法_二分图最小覆盖点(最大匹配数)
题目链接这里是不是应该写下什么是匈牙利算法(找到了一个非常容易理解的一个讲解趣味算法),这位大佬已经讲的很详细了~~~题意:在一个n*n的网格中,有k个炸弹吧,每次可以删除一行或者一列,要清除这所有炸弹最少要删除几次。思路(copy:参考链接):将每行、每列分别看作一个点,对于case的每一个行星坐标(x,y),将第x行和第y列连接起来,例如对于输入:(1,原创 2017-04-19 20:07:39 · 414 阅读 · 0 评论 -
poj3020_最小覆盖路径(顶点个数-二分图最大匹配数)
poj3020 题目链接建议做这题前先做下poj3041题目链接3041那题是最小点覆盖3020是最小路径覆盖题意: *--代表城市,o--代表空地 给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市最少要用多少无线。公式:,最小路径覆盖=总节点数-最大匹配数;但是由于在建图的时候建的是无向图,所以最大匹配数=求得的最大匹配数/原创 2017-04-20 10:22:56 · 1762 阅读 · 0 评论 -
NYOJ127星际之门(一)_n阶完全图的生成树数目
题目链接n阶完全图所有生成树个数为n^(n-2);需要复习的同学点击这里知识点不过测试数据比较水,结果为int类型的就能过~#includeint main() { int T,n; long long s; scanf("%d",&T); while(T--) { scanf("%d",&n);原创 2017-05-04 21:03:03 · 1617 阅读 · 0 评论 -
nyoj170网络的可靠性
题目链接真是对这题无语了,我还以为是是加最少边变成强连通图的题!做了半天发现不对!还是我理解有问题!只要计算中图中节点的度数,度数#include#includeint in[10005];int main(){ int n; while(~scanf("%d",&n)) { memset(in,0,sizeof(in)); int i,u,v,j;原创 2017-05-04 21:47:55 · 213 阅读 · 0 评论 -
NYOJ239月老的难题
题目链接第一次提交的时候用的是邻接矩阵,因为我看测试数据不多,n思路:邻接表+匈牙利算法#include#include#includeusing namespace std;//int e[505][505];int match[505];int book[505];int n,m;vectore[505];bool dfs(int u){ int i,v;原创 2017-05-05 08:58:08 · 289 阅读 · 0 评论 -
模板_HDU2255奔小康赚大钱_最大权最大匹配问题_KM算法
题目链接:奔小康赚大钱KM算法类似于匈牙利算法,只是多了些东西(最大权值的交换,记录)KM算法详解链接不过这道题就已经是KM算法的入门题了相比之下多了两个数组x_price[],y_price[]x_price[]是记录其最大权忘了一个重点:在进入匹配的时候每次都要对x_vis[],y_vis[]清空(memset一下)在匈利牙算法中记得要把v2_vis[]清空一下。原创 2017-04-20 15:04:48 · 361 阅读 · 1 评论 -
关于建图
之前一直狭隘的以为建图就是把题目中给的数据(例如矩阵,边权值等)或者是字符串的形式转换成边关系,今天才发现这才是最低级的(然而我连这转化也做的不怎么样,至少不是每次很轻松的完成)。 我现在所理解的建图不仅仅是将题目中给的数据进行简单的替换了,而是为了解决问题,根据问题类型将其转换成某种图类型,比如是有向图,无向图,二分图(因为我现在依然只学到了这点,等以后做了别的题再补充)。。。,利用不同图原创 2017-04-20 10:43:13 · 450 阅读 · 0 评论 -
最大匹配_完美匹配——概念
交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边...形成的路径叫交替路。增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路(agumenting path)。原创 2017-04-20 15:17:37 · 36427 阅读 · 1 评论 -
强连通图_割点_割边(桥)_双向连通分量关系
双连通分量:分为点双连通和边双连通。它的标准定义为:点连通度大于1的图称为点双连通图,边连通度大于1的图称为边双连通图。通俗地讲,满足任意两点之间,能通过两条或两条以上没有任何重复边的路到达的图称为双连通图。无向图G的极大双连通子图称为双连通分量。Tarjan算法的应用论述:1.求强连通分量、割点、桥、缩点:对于Tarjan算法中,我们得到了dfn和low两个数组,原创 2017-04-23 21:19:47 · 737 阅读 · 0 评论 -
模板_数组实现邻接表
平时处理图边的问题我喜欢用vector实现,今天做了一道题发现用vector 会超时。。。。本来认为这两种方法一样的效率,甚至vector不仅方便还快,看来害死有区别的。贴一下模板(平时没有用过链接表处理的同学看下下面,我贴上了讲解。)memset(head,-1,sizeof(head));void add(int u,int v,double w){ edge[nu原创 2017-04-24 19:03:15 · 459 阅读 · 0 评论 -
poj3159Candies_差分约束系统解决_转换(spfa算法)
真是迷之题啊,第一次用vector超时,不知道是怎么回事!了解数组实现邻接表题目链接题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是B不能比A多超过C个,即B- A<= c 。最后求第n个同学 比 第1个同学最多多几个糖果。算了先说下学习的这个新算法吧;差分约束。 总共n个点,m对 A B c 表示B-A要求1和n的差值原创 2017-04-24 19:33:44 · 378 阅读 · 0 评论 -
模板_poj1201Intervals_差分约束系统解决(类区间问题)
poj1201题目链接题意:第一行输入n,下面输入n个限制条件,条件的格式为 ai bi ci, 0差分约数系统的含义,其实就是如果有n个变量在m个形如aj-ai>=bk(类似于求最长路径)条件下,求解的此不等式的方法。 而这种不等式的解法其实就是转化为图论的最小路的算法求解的。我们将上面的不等式边形后得到aj>=ai+bk正好就可以看做是从ai到aj权值是bk的一条原创 2017-04-24 21:01:15 · 707 阅读 · 0 评论 -
NYOJ973天下第一_最长路判环
题目链接注意:如果可以无限增加真气输出Yes否则输出No我直接忽略了这一点,以为只要能一直流传就可以了,只要这个图是个强连通图就行了,以为转化率是没用的数据。。。第一次是提交也不提示WC,一直提示的Runtime我也找不到哪里错了。。。最后看了下同学的才发现我理解错题意了,学到了新知识,用spfa判环,之前只用过判断负权环判断路环:如果某点的进队次数>该点的入度,则成环#inc原创 2017-05-05 11:01:42 · 356 阅读 · 0 评论 -
路径判环_最长最短路径判环_负权环判环
路径判环,可以用强连通判断,如果缩点后连通分支数为1且该连通分支的节点个数==图中节点n,则路径为强连通图最长最短路径判环_可以用SPFA算法:当某一点的进队次数>该点的入度个数,则路成环负权环_可以用SPFA算法:当某一点的进队次数>n-1时,有负权环原创 2017-05-05 11:08:59 · 829 阅读 · 0 评论 -
模板_poj1273Drainage Ditches_最大流问题_残留网络流增广解决(Ford-Fulkerson方法)
题目链接 最大流定理 如果残留网络上找不到增广路径,则当前流为最大流;反之,如果当前流不为最大流,则一定有增广路径。这里涉及到了一个残留网络.如果已经理解了什么是最大流,算法说起来就比较好理解了,在每次找到一条增广路之后,就去更新它的流量(正反向都要更新),每次更新后再继续原创 2017-04-21 16:29:02 · 457 阅读 · 0 评论 -
poj1459Power Network_最大流的增广路算法_多源点多汇点问题(Edmord_Karp)
题目链接题目大意:现在有一个发电站,需要给用户送电。解释一下输入数据:总结点数 nodenum 电站数power 用户数consumer 电缆线数link然后link行,起点-终点 发电量然后power行,每个电站的产电量然后consumer行,每个用户的用电量解题思路:这道题是最大流的入门题,只是变成了多源多原创 2017-04-22 11:06:55 · 656 阅读 · 0 评论 -
欧拉图和半欧拉图
具有回路的欧拉路径称为欧拉图,不具有回路的欧拉路径称为半欧拉图若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。先说一下欧拉路径、欧拉回路的充要条件: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结原创 2017-05-04 10:36:58 · 7282 阅读 · 0 评论 -
图的割点
如果在图G中去掉一个顶点(自然同时去掉与该顶点相关联的所有边)后,该图的连通分支数增加,则称该顶点为G的割点 怎么去找图的割点呢? 我们容易想到的是遍历图,每次删除一个顶点,删除该顶点后,检查图的连通分支数是否增加,如果增加,该点就是割点,否则不是。大牛们找到了有逼格的算法。。。 用了一个“时间戳”:记录这是第几次遍历的该顶点。和low数组:记录不经过父节点的能回到最小的时间戳。看了那么久的算原创 2017-04-06 20:44:12 · 457 阅读 · 0 评论 -
图的割边_桥_关键道路:
如何求割边(桥):在一个无向连通图中,如果删除某条边后,图不在连通。求割边和求割点算法都一样,只改变了一个符号low[v]>=num[u];把=号去掉。为什么呢?因为求割点的时候是指点v是不可能不经过父节点u为回到祖先节点(包括父节点),所以顶点u是割点。如果low[v]==num[u]表示还可以回到父节点,如果顶点v不能回到祖先也没有另外一条回到父亲的路,那么u-v这条边就是割边原创 2017-04-14 10:05:29 · 452 阅读 · 0 评论 -
poj2060Taxi Cab Scheme_最小覆盖路径问题
题目链接题意: 租车公司有n个预约, 每个预约有时间和地点, 地点分布在二维整数坐标系上, 地点之间的行驶时间为两点间的曼哈顿距离(|x1 - x2| + |y1 - y2|)。一辆车可以在运完一个乘客后运另一个乘客, 条件是此车要在预约开始前一分钟之前到达出发地, 问最少需要几辆车搞定所有预约。给出一些预约的起始时间,出发地和目的地,问至少需要多少车可以满足所有的预约原创 2017-04-29 17:47:48 · 482 阅读 · 0 评论 -
poj3352Road Construction_双连通分量(边)(tarjan算法之一)
poj3352题目链接题意:给出n个顶点,m条边,求至少添加几条边使这个图为双连通图。双连通图分为点连通和边连通图,其中他们之间还有着密切关系(具体可以根据自己需要深入了解)首先根据题意要求和求边连通的方法简单,我们选择用边连通的方法解决问题。将已经连通的图进行缩点,使之变成一棵树,那么最少添加的边个个数就是这棵树的(叶子节点数+1)/2;其实我们是根据每个节点的low原创 2017-04-27 11:16:49 · 550 阅读 · 0 评论 -
强连通分量_双连通分量(转载)
基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合,删原创 2017-04-27 13:02:01 · 705 阅读 · 0 评论 -
割点_去掉割点后的连通分支数(点连通图)
tarjan算法找到割点后,计算出去掉这个点后的图的连通分支数主要是解释在去掉点后的连通分支数的初始值疑问参考题:poj1523点击打开链接原创 2017-04-28 10:43:41 · 1909 阅读 · 0 评论 -
模板_poj1523SPF_割点以及点连通分支
poj1523题目链接题意: 图中是否有割点,去掉某个割点后有几个连通分量。block[i]是去掉割点i后的连通分支个数。割点:去掉这个点后,连通分支数比没去点这个点的连通分支数多1#include#include#includeusing namespace std;#define min(a,b) a<b?a:b #define max(a,b)原创 2017-04-28 10:12:38 · 547 阅读 · 0 评论 -
信道安全(SPFA算法邻接表)大致模板
/* 信道安全 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Alpha 机构有自己的一套网络系统进行信息传送。情报员 A 位于节点 1,他准备将一份情报 发送给位于节点 n 的情报部门。可是由于最近国际纷争,战事不断,很多信道都有可能被遭到监 视或破坏。 经过测试分析,Alpha 情报系统获得了网络中每段信道安全可靠性的概率,情报员 A 决定选 择一条安全原创 2017-03-18 10:00:32 · 471 阅读 · 0 评论 -
强连通分量 tarjan算法
强连通分量 tarjan算法(转) [有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两转载 2017-03-29 20:31:30 · 315 阅读 · 0 评论 -
模板_图的割点
什么时候用到图的割点呢?(当删除一个顶点后,图的连通量个数发生变化。)例如两国打仗,让你找到一个攻击点攻击后致使敌方的原连通的地方不再连同)如同所示:/*6 71 41 34 23 22 52 65 62 */#include#include#define min(a,b) a<b?a:busing namespace std;int n,m,root;i原创 2017-04-20 15:25:21 · 328 阅读 · 2 评论 -
模板_SPFA算法
SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。算法步骤:该算法需要使用到队列,这里我们用STL的queue比如求s点到所有点的最短路径。原创 2017-04-22 19:37:05 · 286 阅读 · 0 评论 -
HDU1853Cyclic Tour_最小权最大匹配_KM负值解决
题目链接和最大权最大匹配一样,只是在存值的时候存的是负值,在判断if(-c>price[a][b])price[a][b]=-c;这一块还能保证重边的问题;也都是用的KM算法#include#include#define max(a,b) a>b?a:b#define INF 1<<31-1int price[105][105];int lx[105],ly[105];boo原创 2017-04-20 19:23:28 · 342 阅读 · 0 评论 -
NYOJ38布线问题_最小生成树
好久没做最小生成题了,只记得算法。。。快比赛了突然在这又出了问题prim算法要用邻接矩阵适用于顶点少的题,做题习惯直接把这种用矩阵的先给排除了,直接用vector,结构体,导致一道题会用时很久做题可不能像我这样,看到题要知道用什么算法,还要去想下需要用哪种数据结构(当算法比较多的时候,我们就要考虑题中的数据,根据题中给的数据大小选择数据结构,继而在选择这个算法的哪种)‘因为顶点不多,就原创 2017-05-04 09:59:50 · 393 阅读 · 0 评论 -
最小生成树_prim(加点)
prim算法是加点的,可以将加入的点和未加入的点分成两部分,及生成树和非生成树,每次从生成树顶点到非生成树顶点的最小权值,每次去更新到某个顶点的最小dis[]值。#includeint main(){ int n,m,i,j,k,min,t1,t2,t3; int e[7][7],dis[7],book[7]={0}; int inf=9999999; int count原创 2017-04-14 09:20:45 · 570 阅读 · 0 评论 -
最小生成树_krustra_通俗易懂()
/*6 92 4 113 5 134 6 35 6 42 3 64 5 71 2 13 4 91 3 219*/*/#includestruct edge{ int u; int v; int w;} e[10];int n,m;int f[7]={0},sum=0,count=0;void quicksort(int left,int原创 2017-04-14 09:11:33 · 874 阅读 · 1 评论