----- 图 论 -----
文章平均质量分 94
ITCharge
高效率编程,慢节奏生活。
展开
-
POJ 2449 Remmarguts' Date【SPFA】【A*】
题目大意:公主要求王子通过第k短的路径去找她。给出了N个点,M条单向边的图。也给出了起点s(王子所在的点)、终点t(公主所在的点)和k。问:K短路是多少。思路:第一次做K短路的题目。用的A*+SPFA来做的。下边简单说下这个算法。使用链式前向星存储图。安装下边步骤来做。(1)将有向图的所有边正向、反向分别存入两个不同的边集(Edges,Edges1)中。用反向边集,以所求终点t为源点,利用SPFA或Dijkstra求解出所有点到t的最短路径,用Dist[i]数组来表示点i到点t的最短距离。(2原创 2015-01-26 16:40:41 · 1380 阅读 · 0 评论 -
POJ1201 HDU1384 Intervals【SPFA】【差分约束】
题目大意:给你N个整数点构成的区间[ai,bi](ai,bi都为整数),在区间[ai,bi]上最少选ci个点。ci可在区间[ai,bi]中随意取,但是不能重复。问:要满足在N个区间取点,至少要选多少个点。思路:差分约束思想。设Si为前i项的整数个数,则S(bi) - S(ai-1) >= ci。还有两个隐含约束条件S(i-1) - S(i) <= 0,S(i)-S(i-1) <= 1。把这三种约束构建一个差分约束系统,用SPFA求最短路径。原创 2015-01-26 23:52:33 · 1040 阅读 · 0 评论 -
POJ1860 Currency Exchange【BellmanFord算法】【求正权回路】
题目大意:有N种货币,货币之间可以按汇率交换,同时还需要收手续费,当你用100A货币去交换B货币,假如A到B的汇率为29.75,手续费为0.39,则你可以得到(100-0.39)*29.75 = 2963.3975的B货币。货币可以一直重复交换,问:能否通过兑换货币之后,增加你手中货币的价值,则输出"YES",否则输出"NO"。思路:把N种货币看成图上的N个点,当你有数量为V的货币A时,货币AB之间的权值就是——(V-手续费)*A到B的汇率这道题就可以转换为求图是否还有可无限增大(含有正权回路)的原创 2015-01-06 23:09:47 · 1191 阅读 · 0 评论 -
HDU1035 Robot Motion【链式前向星】
题目大意:给你一个n*m的矩形图,每个位置上有'N'、'S'、'W'、'E',分别表示上下左右四个方向。给你初始位置,如果能走出去了, 输出走出去的步数。如果成环了,就输出环走一圈需要多少步。思路:用链式前向星来做,把图看做是n个点,每个位置就是一条边,将边用链式前向星存起来,每条边就有了一个序号,这个序号就是走的步数。然后,每走一步,我们就开始判断是否在之前存储过这个位置(这条边),如果存储过就跳出循环,输出已存在这个位置的序号(就是走圈前的步数),再输出总序号-已存在那个位置的序号(就是走圈原创 2014-12-18 15:21:41 · 1102 阅读 · 0 评论 -
POJ3259 Wormholes【BellmanFord】
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 550;const int MAXM = 5500;const int INF = 0xffffff0;struct EdgeNode{ int to; int w; int next;}Edges[MAXM];int Head[MAXN],Dist[原创 2015-01-07 11:09:32 · 1001 阅读 · 0 评论 -
POJ3169 Layout【SPFA】【差分约束】
题目大意:奶牛喜欢站成一排吃饲料,有的奶牛喜欢靠在一起,他们最多距离D米远。有的奶牛不喜欢靠在一起,他们最少距离D米远才可以。给你一系列的约束条件,问:如果在上述条件下,奶牛站不成一排,则输出"-1",如果能站成一排,但是第1头牛~第N头牛的距离无限远,则输出"-2",如果满足条件,并且第1头牛~第N头牛之间存在实际距离,则输出第1头牛~到第N头牛之间的能达到的最远距离。思路:直接的差分约束系统,设牛u和牛v的位置为u和v。第1条:设牛u和牛v最多距离w米远,转换为:v - u <= w。第2原创 2015-01-27 22:54:59 · 1063 阅读 · 0 评论 -
POJ1364 HDU1531 King【SPFA】【差分约束】
题目大意:一个国王通过一个序列来做决定,他有几段段连续子序列的和的条件,知道各段子序列的和是大于还有小于某个数(这个数已知)。问:是否能找到这样的序列。转换一下,就是N个数组成一个序列,已知M段几个连续的数组成的子序列构成的不等式,求这几个不等式构成的不等式组是否有解。例如:序列{A1,A2,A3,A4,A5,…,An},有M个不等式,比如说:Ai + A(i+1) + A(i+2) + A(i+3) + A(i+4) + … + A(i+t) < Ki 或者是Ai + A(i+1) + A(i原创 2015-01-26 21:56:46 · 1050 阅读 · 0 评论 -
HDU1534 Schedule Problem【SPFA】【差分约束】
题目大意:安排N个工作 ,给你N个工作的开始时间,共有4种安排方式(约束条件)。条件1:FAF a b,a要在b完成后完成。条件2:FAS a b,a在在b开始前完成。条件3:SAS a b,a要在b开始前开始。条件4:SAF a b,a要在b结束前开始。 给你一系列的约束条件。问:使其工作时间最小且满足所有约束条件的各个工作最早时间各是什么。如果不满足条件则输出"impossible"。思路:差分约束系统。设第i件工作的开始时间为t[i]。4个约束条件变成:条件1:FAF Sa + t[a原创 2015-01-27 14:27:02 · 1436 阅读 · 0 评论 -
HDU3440 House Man【SPFA】【差分约束】
题目大意:在一条直线上有N个房子,每个房子的高度不一样,一个超人可以将这N个房子左右移动,但是不能改变房子的相对位置。位置都为整数点。同一位置不能有两个以上的房子两个超人从最矮的房子开始,跳到刚好比他所在房子高的房子上去,一直这样跳,每次跳到的房子都比现在所在的房子高,而且每次跳的水平距离不能超过D米。问:如何将这些房子进行合理的摆放(不改变相对位置的前提下),使得超人能够经过所有的房子跳到最高的房子,又要使最矮的房子和最高的房子之间的距离最远?输入说明:第一行:先输入一个T,表示T组数据。原创 2015-01-27 20:23:50 · 1206 阅读 · 0 评论 -
POJ1734 Sightseeing trip【Floyd】【最小环】
题目大意:有个旅游公司要开发一条新的旅游路线,要求这条路尽可能短,但是又不能只包含两个城市,并且旅游途中不能回到之前去过的城市,只能去往下一个没去过的城市,旅游结束的时候要回到最开始的城市,要求求出整个旅游路线经过的城市。思路:给N个点,M条边建图。路程最短,且要形成环,其实就是求最小环问题。可以用Floyd来做。用Dist[i][j]存储从i到j的最短路径,但是 i != j,因为最少要有3个点(加上k至少3个点)。用pre[i][j]来表示从点i到点j的路径中j点前边的点。判定最小环时,点i到原创 2015-01-28 20:54:00 · 1134 阅读 · 0 评论 -
POJ2186 Popular Cows【Kosaraju】【强连通分量】
题目大意:每头奶牛都希望自己成为最欢迎的那头牛。给你N头牛,M个崇拜关系(A,B)。意思是牛A崇拜牛B。特别是,如果牛A崇拜牛B,牛B崇拜牛C,那么牛A也崇拜牛C。那么问题来了:请计算出被所有牛崇拜的牛的个数。思路:刚学的Kosaraju算法。考虑这道题,把崇拜关系(A,B)看做是一条有向边,并且,我们发现牛的崇拜关系具有传递性。那么只要牛A有一条路径连向牛B,就可以判定牛A崇拜牛B。于是,被所有牛崇拜的牛就是所有的点都存在一条路径连向它的有向路径。下边简述下Kosaraju算法:(1)对原图原创 2015-01-29 19:42:25 · 1265 阅读 · 0 评论 -
POJ2230 Watchcow【欧拉回路】
题目大意:给你一个N个点的图,M条双向边,从原点1出发,两个方向各走一遍,最后回到原点。输出整个路径。从1开始,到1结束。共2*M+1行。思路:DFS遍历,vis数组标记已遍历的边。最重要的地方是在哪里保存路径。因为DFS函数的结束顺序就是点的回溯顺序,所以应该在DFS回溯完之后再记录当前点的序号,也就是now的值。原创 2014-12-23 08:46:04 · 1245 阅读 · 0 评论 -
POJ2186 Popular Cows【Tarjan】【强连通分量】
题目大意:每头奶牛都希望自己成为最欢迎的那头牛。给你N头牛,M个崇拜关系(A,B)。意思是牛A崇拜牛B。特别是,如果牛A崇拜牛B,牛B崇拜牛C,那么牛A也崇拜牛C。那么问题来了:请计算出被所有牛崇拜的牛的个数。思路:把崇拜关系(A,B)看做是一条有向边,并且,我们发现牛的崇拜关系具有传递性。那么只要牛A有一条路径连向牛B,就可以判定牛A崇拜牛B。于是,被所有牛崇拜的牛就是所有的点都存在一条路径连向它的有向路径。这道题中,将原图强连通分量缩点后构成了DAG,那么如果新图中出度为0的点只有一个,则有原创 2015-02-02 17:30:27 · 1048 阅读 · 0 评论 -
HDU1162 Eddy's picture【Prim】
题目大意:给你N个点的坐标,求能使这N个点相连的所有边的最小距离是多少。思路:先求出每个点和其他点的距离,存到图中,用Prim模板来做。原创 2014-12-25 16:18:10 · 1436 阅读 · 0 评论 -
HDU1863_畅通工程【Prim】【并查集】
题目大意:给你M个村庄、N条路,即N条路所连接的两个村庄即路程。问能否各个村庄都能有路达到,若不通,则输出'?',若通,则计算出连接所有村庄最小的路程和思路:先用并查集判断能否所有村庄。把有路连接的村庄并到一个集合里。最后,若只有一个集合,则所有村庄都能连接。若有两个以上,则肯定有村庄不能到达。然后用Prim算法计算出图的最小生成树。原创 2014-10-19 21:17:14 · 1158 阅读 · 0 评论 -
HDU1301 Jungle Roads【Prim】
题目大意:给你一个用前N个村庄,村庄用字母表的前N个字母表示,接下来N-1行表示第字母X与其相连的村庄数目,及其相连的村庄字母和两个村庄的距离,求最小生成树。思路:Prim模板题。原创 2014-12-24 23:14:19 · 945 阅读 · 0 评论 -
POJ1236 Network of Schools【Tarjan】【强连通分量】
题目大意:N台电脑之间能够通过有向边(u,v)从第u台电脑传输文件到第v台电脑。如果给第u台电脑投放一个文件,那么这个文件就能通过有向边传输到第v台电脑上,给你N台电脑的连接情况。那么问题来了:1、最少向这N台电脑中的几台电脑投放文件,就能使N台电脑都能接收到文件。2、最少向这N台电脑构成的图中添加几条边,使只向一台电脑投放文件,就能够是N台电脑都能接收到文件。思路:该图中的文件具有传递性。很快发现强连通的特征。对应图中的一个强连通分量,只要向其中的一个点投放文件,那么这个强连通分量就都能原创 2015-02-03 10:21:26 · 1741 阅读 · 0 评论 -
HDU1233 还是畅通工程【Prim】
题目大意:给你一个图,求连接所有点的最短路径。思路:Prim算法求图的最小生成树,模板题。原创 2014-12-23 22:36:35 · 908 阅读 · 0 评论 -
HDU1875 畅通工程再续【Prim】
题目大意:给你几个岛的坐标,只有两个岛的距离在10~1000米范围内的岛才能建立道路。每米道路花费100元。问:能否建立连接全部岛屿的道路。若能,输出建立道路的最小花费;若不能输出"oh!"。思路:主要是建图问题,纠结在Prim上半天,最后才发现只要建图的时候多想想就好了。建图的时候,只有满足条件的才能赋值距离,否则就为INF(假设的无穷大)。Prim求最小生成树的时候,若没有找到与当前链接岛屿最近的满足建造条件的道路,就直接输出"oh!",并退出。否则就继续查找,直到最后输出最小花费。原创 2014-12-25 10:37:56 · 1013 阅读 · 0 评论 -
POJ2375 Cow Ski Area【Tarjan】【强连通分量】
题目大意:有一片供奶牛滑雪的滑雪场,可供滑雪的区域是W(宽)*L(长)的矩阵。上边有W*L个点。规定奶牛从一个点只能向它上、下、左、右相邻的并且高度不大于它的点运动。现在想要在某些点对之间架设缆车,使得奶牛可以从较低的地方想较高的地方运动,那么问题来了:最少需要多少辆这样的缆车就可以使奶牛从每个点运动到可供滑雪区域的每个角落。思路:把奶牛符合从点u移动到点v的条件当做一条单向边。那么所有点和边就可以构成有向图。根据奶牛可以从点u移动到邻近并且高度不大于它的点v,可以分为两种情况:(1)点v比原创 2015-02-04 11:24:00 · 935 阅读 · 0 评论 -
HDU2988 Dark roads【Kruskal】
题目大意:给你N个点M条路的图,点的变化由0~N-1,求最小生成树。思路:裸的Kruskal算法,直接求就可以。原创 2014-12-27 13:34:59 · 1235 阅读 · 0 评论 -
POJ1679 The Unique MST【Kruskal】【次小生成树】
题目大意:给你N个点M条边的图,问:图的最小生成树是否唯一。思路:参考算法书,在kruskal算法的基础上进行修改,加入(x,y)两点在最小生成树上路径最长的边的计算。使用了链式前向星记录每个集合中含有那些点。在合并集合(邻接表)的时候,为了方便,加入了End[]记录邻接表尾节点的位置。MST表示最小生成树的大小,SecMST表示次小生成树的大小。最后判断是否想等即可。原创 2014-12-28 00:02:05 · 3237 阅读 · 0 评论 -
HDU4857 逃生【逆拓扑排序】
逃生思路:刚开始以为直接拓扑排序就可以,其实不然。题目的意思是:如果有满足拓扑排序的多种情况的前提下,让1先尽量靠前,满足1尽量靠前之后,让2尽量靠前,而不是直接的字典序。比如:4 23 24 1结果应为4 1 3 2,而不是3 2 4 1。所以进行反向建边,然后拓扑排序,用链式前向星存储图,为了使得序号小的点尽量靠前,所以用优先队列存储将入度为0的点,在逐一取出,遍历该点的边,就使得大的点尽量靠前,最后逆序输出就可以了。Time Limit: 2000/1000 MS (J原创 2014-12-22 14:57:51 · 1099 阅读 · 0 评论 -
UVA10305 Ordering Tasks【DFS】【拓扑排序】
题目大意:有n个变量,和m个二元组关系。关系(x,y)表示x<y。现在讲所有变量从小到大来排序,进行输出。例如:有4个变量a、b、c、d,若a<b,c<b,d<c,则排序后的可能为a<d<c<b,也有其他可能d<a<c<d。只要输入其中一个就可。思路:把n个变量看成是n个点,“x<y”看做是一条边,则得到一个有向图。对图的节点进行排序,使得每一条有向边(x,y)对应的x都在y前边。即所谓的拓扑排序。DFS进行拓扑排序,如果存在有向环,则不存在拓扑排序,否则就将访问完的结点假如到当前拓扑序列的前原创 2014-12-12 20:19:34 · 1188 阅读 · 0 评论 -
HDU4324 Triangle LOVE【拓扑排序】
题目大意:给你一个图,图中任意两点之间要么有正向边,要么有反向边。判断是否含有a->b->c->a的三角形环。思路:其实只要有环,就能构成三角形环。因为任意两点之间要么有正向边,要么有反向边。如果现在有一个四元素环 a->b->c->d->a,若a不指向c,则c必定指向a,所以必定存在三角形环。直接拓扑排序,如果不能排序,则有三角环,输出“Yes”,能拓扑排序,则不含有三角环,输出"No"。原创 2014-12-22 22:47:19 · 1417 阅读 · 0 评论 -
HDU3342 Legal or Not【拓扑排序】【链式前向星】
题目大意:给你一个有向图,判断是否有环。思路:构建拓扑排序,如果排序失败,说明该有向图存在有向环。另一种思路,用链式前向星存储图,在数据输入的同时统计每个点的入度,并存入indegree数组,每删除一个点,就遍历以这个点为起点的边,将边对应的入度减1即可选择并删除下一点。用队列来存储已发现的入度为0的点,更新入度的同时更新这个队列。如果最终得到队列中的元素个数小于总的元素个数,说明排序失败,存在环。原创 2014-12-19 20:59:07 · 1438 阅读 · 0 评论 -
HDU2647 Reward 【拓扑排序】
题目大意:老板要发酬劳,但是工人酬劳不一样,有N个人,M种情况。a的酬劳一定要高于b。每个人最低酬劳为888,问:老板最少要花费多少钱。思路:以b->a为有向边建立拓扑排序,不满足排序就输出"-1",否则就进行拓扑排序,将拓扑排序的点看成一层一层的,无入度的为第一层,通过一条边能走到的为第二层。通过两条边才能走到的为第三层。每一层都比前一层多一块钱。最后输出总钱数。原创 2014-12-22 15:50:20 · 899 阅读 · 0 评论 -
POJ3164 Command Network【最小树形图】【朱刘算法】
题目大意:长时间战争过后,一场战争终于切断了Littleken和KnuthOcean王国的联系。Littleken的指挥网络瘫痪了,现在最重要的事是建立一个临时的通信网络,这个任务交给了Snoopy。Snoopy觉得最重要的一点是要把命令传到被摧毁的网络中的每一个点上,所以他决定先建立一个单向的传输网络。假设所有的传输节点都分布在一个平面上。如果Littleken的命令想要从节点A传送到节点B上,必须建立一个单向电缆从节点A连接到节点B。为了尽可能节省资源,要求通信网络所用的电缆长度最小(参考A原创 2014-12-29 20:46:09 · 1781 阅读 · 0 评论 -
HDU4009 Transfer water【最小树形图】【不定根】
题目大意:一个村庄被洪水摧毁了,整个村庄都要转移。但是山上没有泉水,每户家庭只能在自家挖一个水井或是修一个水渠从别的家庭引水。如果要修井,则修井费用和房子所在海拔高度有关,每米X元。如果从别人的家里引水,如果从高于自己家高度的人家里引水,费用为每米Y元。如果从低于自己家高度的人家里引水,每条要多花费Z元。现在给你这个村庄N个家庭房屋的坐标(a,b,c)和三种花费X,Y,Z。接着给你各家之间能单向修建引水沟渠的限制。问:能使全村庄的人喝上水的总修建费用最低为多少。若不能,则输出"poor XiaoA原创 2014-12-29 23:05:21 · 1137 阅读 · 0 评论 -
POJ1330 Nearest Common Ancestors【最近公共祖先】【Tarjan-LCA算法】
题目大意:给你一棵树,有N个结点,N-1条边。最后询问距离树上两个点(u,v)最近的公共祖先是多少。比如上图:6和16的最近公共祖先就是4;14和1的最近公共祖先就是1。思路:对于最近公共祖先LCA问题,最经典的离线算法是Tarjan-LCA算法。用链式前向星存储图和询问,Head[]和Edges[]表示图(树),QHead[]和QEdges[]表示询问。集合的操作用并查集实现。这道题里用了indegree[]数组来存储结点的入度,找到入度为0的根结点root,调用LCA(root)。Tarj原创 2014-12-31 20:42:20 · 931 阅读 · 0 评论 -
POJ1986 Distance Queries【最近公共祖先】【Tarjan-LCA算法】
题目大意:John是一个农场主,他的牛很懒,拒绝按照John选的路走。John不得不找一条最短的路。这道题的输入前半部分和POJ1984"Navigation Nightmare"相同。在每组数据之后是一个整数K,接下来K行是询问(u,v)的曼哈顿距离(u,v是农场编号)。最后输出所有询问结果。POJ1984链接:http://poj.org/problem?id=1984思路:本题输入有些特殊,给出的是某点在某点的某个方向(东西南北)有多远。由于输入数据比较特殊。全部是有向边,且构不成回路,所原创 2014-12-31 21:02:06 · 3882 阅读 · 0 评论 -
HDU2121 Ice_cream’s world II【最小树形图】【不定根】
题目大意:一个国家有N个城市,M条有向道路,国王想要选一个城市为首都,使得这个城市既能连接所有的城市,而且总的路程最短。若能找到这个城市,则输出最短路程和城市编号。思路:求有向图的最小树形图,不过根节点是不定的。虚拟一个根结点,到每个结点都有一条边,其到每个结点的权值应该相等,表明每个结点都应该且都有机会当根。且边的权值应比总权值大一些。如果最终算出的最小树形图的总权值大于或等于 原图的总权值 + 虚根到实根(也就是原图的总权值),其实就是算出的最小树形图的总权值大于或等于 原图总权值的二倍,原创 2014-12-30 23:20:42 · 1481 阅读 · 0 评论 -
HDU2586 How far away ?【最近公共祖先】【Tarjan-LCA算法】
题目大意:一个村庄有N个房子和一些双向的路,人们总是喜欢问"A到B有多远呢",一般是很难回答的,毕竟有很多种答案。所幸,答案是唯一的,A到B总是有唯一的路径到达。第一行是T组数据。每组数据第一行是N个房子和M条询问。接下来N-1行每行是u v w,表示从房子u到房子v的距离是w。接下来是M行询问。每行是u v,表示询问房子u到房子v的距离,最后输出所有的询问结果。思路:整个村庄房子和路可看成一棵树,设根结点为房子1,询问u到房子v的距离,其实就是求u到根结点的距离 + v到根结点的距离 - 2*原创 2014-12-31 21:53:16 · 1273 阅读 · 0 评论 -
HDU2544 最短路【Dijkstra算法】
题目大意:给你N个结点和M条路,接下来是M条路,A B W表示结点A到节点B权值为W。然后从节点1出发,问到节点N的最短路径长为多少。思路:求单源最短路径,用Dijkstra算法来做。Dijkstra算法:将所有点分为两个集合。如果源点s到u的最短路径已经确定,点u就属于集合V1,否则属于集合V2。1.将源点s到图中各点的直接距离当做初始值记录为s到各点的最短距离,不能到达的记为INF。S到S距离为0。2.在集合V2中的点中找一个点u,使得源点s到该点u路径长度最短,将u从V2中除去,加到原创 2015-01-01 23:17:23 · 1232 阅读 · 0 评论 -
POJ3659 Cell Phone Network【最小支配集】【贪心】
题目大意:John想让他的所有牛用上手机以便相互交流(也是醉了。。。),他需要建立几座信号塔在N块草地中。已知与信号塔相邻的草地能收到信号。给你N-1个草地(A,B)的相邻关系,问:最少需要建多少个信号塔能实现所有草地都有信号。思路:考察树最小支配集问题。最小支配集:值从所有顶点中取尽量少的点组成一个集合,使得剩下的所有点都与取出来的点有边相连。顶点个数最小的支配集被称为最小支配集。这里用贪心法来求。1.以1号点深度优先搜索整棵树,求出每个点在DFS中的编号和每个点的父亲节点编号。2.按DFS原创 2015-01-01 14:04:46 · 2373 阅读 · 0 评论 -
HDU3790 最短路径问题【Dijsktra算法】
题目大意:上边说的很清楚了,边之间多了花费。求图中两点间的最短路径,如果最短路径有多个,输出花费最少的那个。思路:Dijkstra算法来求单源最短路径,在更新路径的时候如果距离相等,则更新花费。最后注意输入的时候判断下,避免重边。原创 2015-01-02 21:40:59 · 1284 阅读 · 0 评论 -
HDU2066 一个人的旅行【Dijkstra】
题目大意:给你T条路的图,和S个起点和D个终点,问从S个起点中某个起点,到D个终点中的某个终点的最短路径是多少。思路:遍历起点S和终点D,用Dijkstra算法求单源最短路径即可。原创 2015-01-02 22:24:57 · 1149 阅读 · 0 评论 -
POJ3905 Perfect Election【2-SAT】【Tarjan】
题目大意:有N个候选人,有M组要求,每组要求关系到候选中的两个人A和B,"+A +B"表示A和B中至少有一人被选中,"-A -B"表示A和B中至少有一人不被选中。"+A -B"表示A被选中和B不被选中两件事至少发生一件。"-A +B"表示A不被选中和B被选中至少发生一件。那么问题来了:是否存在M组要求全部符合的方案。思路:在本题中,每个人都有两种状态,一种是选中,一种是不选中。可以把一个人i拆成两个点Pi和P(i+N),分别表示当选和落选。那么两个人i和j的关系就可以表示为以下四种:i和j至原创 2015-02-20 21:58:51 · 1114 阅读 · 0 评论 -
POJ1523 SPF【点双连通分量】【Tarjan】
题目大意:有一个网络,在这个网络里,电脑之间的通信只能是两台电脑间(点对点)双向通信。如下面左图所示:如果3号电脑出故障了,那么1号和2号之间、4号和5号之间还可以通信,不过1、2和3、4号电脑之间就不能通信了,那么3号电脑就是一个SPF节点,且3号电脑故障后,整个网络被分为了2个子网络。那么问题来了:给你一些边。问删除某个SPF节点后,可以将图分为几个连通分量。思路:其实就是给你一个连通图,求出这个连通图的所有割点编号,并求出若删去其中一个割点后,原网络被分成几个子网络。这里我们使用的思原创 2015-02-17 15:16:24 · 1070 阅读 · 0 评论 -
HDU1102 Constructing Roads【Prim】
题目大意:先给你N个村庄之间距离,用矩阵表示。再告诉你S个已经建好的路。求再建多少距离的路,能实现N个村庄全部联通。思路:用Prim算法来求最小生成树,已经建好的路就看做是路连接的两个村庄之间距离为0。图建好后直接用Prim模板就可以了。原创 2015-01-03 18:28:33 · 816 阅读 · 0 评论