随笔分类 - 图算法————图论
POJ 3114 Countries in War(强联通分量+Tarjan)
摘要:题目链接题意 : 给你两个城市让你求最短距离,如果两个城市位于同一强连通分量中那距离为0.思路 :强连通分量缩点之后,求最短路。以前写过,总感觉记忆不深,这次自己敲完再写了一遍。 1 #include 2 #include 3 #include 4 #include 5 #incl...
阅读全文
POJ 1144 Network(Tarjan)
摘要:题目链接题意 : 找出割点个数。思路 : Tarjan缩点,u是割点的充要条件是:u要么是具有两个以上子女的深度优先生成树的根,要么不是根,而有一个子女v满足low[v]>=dfn[u]。 1 #include 2 #include 3 #include 4 #include 5 6 us...
阅读全文
POJ 3177 Redundant Paths(Tarjan)
摘要:题目链接题意 : 一个无向连通图,最少添加几条边使其成为一个边连通分量 。思路 :先用Tarjan缩点,缩点之后的图一定是一棵树,边连通度为1。然后找到所有叶子节点,即度数为1的节点的个数leaf,最后要添加的边的条数就是(leaf+1)/2 ; 1 // 3177 2 #include 3 #i...
阅读全文
POJ 1523 SPF(求割点)
摘要:题目链接题意 : 找出图中所有的割点,然后输出删掉他们之后还剩多少个连通分量。思路 : v与u邻接,要么v是u的孩子,要么u是v的祖先,(u,v)构成一条回边。 1 //poj1523 2 #include 3 #include 4 #include 5 6 using namespace ...
阅读全文
ZOJ 2588 Burning Bridges (tarjan求割边)
摘要:题目链接题意 : N个点M条边,允许有重边,让你求出割边的数目以及每条割边的编号(编号是输入顺序从1到M)。思路 :tarjan求割边,对于除重边以为中生成树的边(u,v),若满足dfn[u] 2 #include 3 #include 4 #include 5 6 using names...
阅读全文
2014多校第六场 1005 || HDU 4925 Apple Tree
摘要:题目链接题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两倍,如果(i,j)有一颗苹果树,(i-1,j)与(i,j+1)施了肥,那么苹果应该是1的两倍2,2的两...
阅读全文
HDU 1142 A Walk Through the Forest(SPFA+记忆化搜索DFS)
摘要:题目链接题意 :办公室编号为1,家编号为2,问从办公室到家有多少条路径,当然路径要短,从A走到B的条件是,A到家比B到家要远,所以可以从A走向B 。思路 : 先以终点为起点求最短路,然后记忆化搜索。 1 //1142 2 #include 3 #include 4 #include 5 #in...
阅读全文
POJ 1300 Door Man(欧拉回路的判定)
摘要:题目链接题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间。思路 : 这就是一个赤裸裸的判断欧拉通路的问题了,但实际上,就只有两种情况能够输出YES,以房间为顶点,连接房间之间的门为边构造图,这两种情...
阅读全文
HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)
摘要:题目链接题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同。给你一组单词问能不能排成上述形式。思路 :把每个单词看成有首字母指向尾字母的有向边,每个字母看成一个点,题中要求等效于判断图中是否存在一条路径经过每一条一次且仅一...
阅读全文
欧拉回路基本概念及定理
摘要:1. 欧拉通路、欧拉回路、欧拉图无向图:1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路;2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路(Euler circuit);3) 具有欧拉回路的无向图G称为欧拉图(Euler graph)。有向图:1...
阅读全文
HDU 3790 最短路径问题(SPFA || Dijkstra )
摘要:题目链接题意 : 中文题不详述。思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次。 1 //3790 2 #include 3 #include 4 #include 5 #include 6 #inclu...
阅读全文
POJ 3411 Paid Roads(SPFA || DFS)
摘要:题目链接题意 : 要从1城市到n城市,求最短路是多少,从a城市到达b城市的路程,如果你到过c城市,则需要走p,否则走r长。思路 : 因为可以来回走,所以不能用单纯的最短路,可以用二维SPFA,状态压缩一下,第二维来记录状态,表示到过这个点的第几个状态。也可以用DFS,因为最多十个点,所以如果走某一个...
阅读全文
2014年微软编程之美初赛第一场 第二题 树
摘要:题目链接题目2 : 树时间限制:4000ms单点时限:2000ms内存限制:256MB描述有一个N个节点的树,其中点1是根。初始点权值都是0。一个节点的深度定义为其父节点的深度+1,。特别的,根节点的深度定义为1。现在需要支持一系列以下操作:给节点u的子树中,深度在l和r之间的节点的权值(这里的深度...
阅读全文
HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)
摘要:点我看题目题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆。思路 : 这个题太狠了,简直不是人做的。。。。可以BFS一下,然后在B之前先D一下能走的路。当然也可以用SPFA+Floyd。#include #include #include #include #include using namespace std ;struct node{ int u,w ;}temp ;struct BFS{ int u,w,step ;}t,t1 ;const i...
阅读全文
ZOJ 2750 Idiomatic Phrases Game(Dijkstra)
摘要:点我看题目题意 : 给定一本字典,字典里有很多成语,要求从字典里的第一个成语开始,运用字典里的成语变到最后一个成语,变得过程就是成语接龙,后一个成语的第一个字必须有前一个成语的最后一个字相等,给定的成语是4位16进制位,每个成语前边跟的数字代表着找到这个成语之后再找到下个成语还需要t分钟。思路 :将所有的成语看成一个点,如果找到下一个成语,就建一条有向边,然后用dijkstra求最短路。#include #include #include using namespace std;struct node{ char f[5],b[5] ; int timee ;} dicti[101...
阅读全文
SDUT 2622 最短路径(Dijkstra)
摘要:点我看题目题意 :中文不详述。思路 :因为这个题加了一个要求就是路径数目得是x的倍数。所以在原来算法的一维dis数组增加到二维,用来存走的路径数%x。也可以用spfa做。#include #include #include #include using namespace std ;#define LL long longconst int maxn = 110 ;const int maxm = 10010 ;bool vis[maxn][maxn] ;const LL INF = 1LL dist[i][j]) { min...
阅读全文
POJ 1135 Domino Effect(Dijkstra)
摘要:点我看题目题意 : 一个新的多米诺骨牌游戏,就是这个多米诺骨中有许多关键牌,他们之间由一行普通的骨牌相连接,当一张关键牌倒下的时候,连接这个关键牌的每一行都会倒下,当倒下的行到达没有倒下的关键牌时,这个关键牌也会倒下,然后与这个关键牌相连接的所有行都会倒下,每一行有两个端点也就是两个关键牌,可以从任意一个端点开始倒下,也可以从两个端点同时开始倒下,从第一张骨牌开始倒,最后倒下的牌的位置以及时间。思路 : 先利用Dijkstra求出每张关键牌倒下的时间time[i],即求出第一张关键牌到其他关键牌的最短路径,然后求出众最短路径中最大的那个,即为time1。再计算每一行倒下的时间,每一行的两个关键
阅读全文
POJ 1778 All Discs Considered(拓扑排序)
摘要:点我看题目题意 :其实题意我也说不清楚,因为比赛的时候我盯着看了1个小时也没看懂。。。。就是两个磁盘,第一个有n1的安装包,编号为1~n1,第二个有n2个安装包,编号为n1~n2。给你d对关系,(x,y)代表着安装x之前要先安装y。然后让你往里插入这两个磁盘,因为一次只能插一次,所以要满足他给的条件的时候要频繁的来回换。还有,要注意的一点是,无论先往里边插第一个还是第2个,第一次插的时候算一次,最后一次拔的时候算一次。思路 :其实我真不知道这是拓扑排序,,,,,后来才知道的。。。。。//#include //#include //#include //#include ////const in
阅读全文
POJ 3308 Paratroopers(最小割EK)
摘要:题目链接题意 : 有一个n*m的矩阵,L个伞兵可能落在某些点上,这些点的坐标已知,需要在某些位置安上一些枪,然后每个枪可以将一行或者一列的伞兵击毙。把这种枪安装到不同行的行首、或者不同列的列首,费用都不同。现在已知把激光枪安装到任意位置的费用,总的花费为这些安装了激光枪的行列花费的乘积。思路 :就是一个最大流问题。Dinic我不会,用的白皮书上的EK算法,嗯,还行,这个建图比较麻烦,就是把行列分开,成为m+n+1个点。嗯,不废话了,还是把大神博客链接弄过来吧,各方面都讲得很详细。#include #include #include #include #include using namespa
阅读全文
POJ 3352 Road Construction (边双连通分量)
摘要:题目链接题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点思路 :把景点看成点,路看成边,看要加几条边使这个图变成双连通图。一开始我以为只要求出桥的个数,然后在每个桥的地方加一条边就行了,后来发现不是。例如:这个图中,桥有4条,但实际上只需要在1跟10,10跟9中间加两条边就行了。所以,实际上这个题是先进行缩点,然后求缩点后的图至少增加几条变能够变成双连通图。缩点之后构建成一颗树,所有的边都是桥,根据定理,任意一颗树,要想成为双连通图,则需要增加的边数为(这棵树上所有度数为1的结点的个数+1)
阅读全文
浙公网安备 33010602011771号