
图论
南山小翁
活在当下,要有思想,每个人不是随随便便就能成功!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu1827强连通+缩点
思路:利用tarjan算法,记录每个点所属的连通分支,然后计算每个SCC的入度,最后计算每个SCC(入度为0)中花费最小的值 //强连通+缩点 #include #include #include #include #include #include #define max 1111 using namespace std; int N,M; int X,Y,SCC; int tem; int原创 2013-04-14 19:06:34 · 631 阅读 · 0 评论 -
poj1144 求割点 模版题
#include #include #include #include #include using namespace std; const int Max=111; int low[Max],dfn[Max]; int cnt[Max]; vectorGra[Max]; int n,m,sons; int MIN(int a,int b) { return a原创 2013-05-22 20:35:10 · 833 阅读 · 0 评论 -
poj1523 求割点 及 该割点 可以 把该图分成几个连通分量
思路:当一个几点为割点时必须满足两个基本条件:情况1: u为根且至少为两颗子树.情况2:u不为根且存在一个u在深搜树中的子女满足low[v]>=dfn[u],u为父亲v为子女#include #include #include #include #include using namespace std; const int Max=1001; int t,v1,v2; listGr原创 2013-05-21 12:33:06 · 886 阅读 · 0 评论 -
poj3352 利用边的双连通性质求解
给你一个无向图,求解至少需要添加几条边,就能保证删除任一条边时,图仍然是连通的 思路: 求解至少添加多少条边,可以使该图成为边的双连通图 利用tarjan算法:求解low[]值记录父亲结点,然后low[]相同的点,在一个连通分量中,然后缩点 求解出度为1的点的个数ans,答案就是(ans+1)/2; #include #include #include #include #inc原创 2013-05-21 17:24:24 · 684 阅读 · 0 评论 -
图论基本概念:
图的割点、桥与双连通分支 [点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。 [转载 2013-05-21 16:28:16 · 885 阅读 · 0 评论 -
poj2553强连通+缩点 如果让我说:我只能说,实力决定一切
思路:tarjan()算法,记录每个点的出度值(缩点之后),把所以出度为0的点找出来,然后进行从小到大排序 #include #include #include #include #include #include #define maxn 5111 using namespace std; int V,E,sum,tem; int dfn[maxn],low[maxn原创 2013-04-21 08:09:59 · 651 阅读 · 1 评论 -
hdu1269强连通水题 如果让我说:我只能说,实力决定一切
#include #include #include #include #include #include #define maxn 11111 using namespace std; int dfn[maxn],low[maxn],vis[maxn],belong[maxn],ind[maxn],outd[maxn]; int sum,tem; vectorgra[maxn原创 2013-04-20 20:24:25 · 633 阅读 · 0 评论 -
hdu2767强连通+缩点 如果让我说:我只能说,实力决定一切
题意:给你一个有向图,然后添边,让该图成为连通分量为1的连通图,需要添加的边数 思路:强连通+缩点,记录每个连通分量的入度和初度为0 的个数。找一个最大的值 刚开始自己认为如果一个连通分量的入度为1,那么它的出度一定为0,这是极大的错误。 #include #include #include #include #include #include #define maxn原创 2013-04-20 19:56:05 · 663 阅读 · 0 评论 -
poj2186 强连通+缩点 如果让我说:我只能说,实力决定一切
思路:蛋疼的一道题目,自己又想多了,记录所有点的出度(缩点),如果该缩点的出度为0,那么其解就是该缩点里所有点的总数,否则无解 #include #include #include #include #include #include #define maxn 11111 using namespace std; int V,E,sum,tem; int dfn[maxn],原创 2013-04-21 15:01:34 · 612 阅读 · 0 评论 -
hdu1301 MST+优先队列 如果让我说:我只能说,实力决定一切。
题意:给你n个站点,每个站点之间有一条路径相连即:带权路径。如果你能做完全部的点,计算最小的话费。 思路:MST+优先队列。 #include #include #include #include #include #include #define maxn 111 using namespace std; int far[28]; int rank[28]; struct原创 2013-04-20 11:56:16 · 747 阅读 · 0 评论 -
hdu1102 prime()和kruskal()两种方法,感觉不错。 如果你要问我:我只能说,实力决定一切
题意:与以前的做的MST的区别就是:该题有些路已经修完了,所以要特殊处理一下 思路:看代码。 //prime()算法: #include #include #include using namespace std; int map[111][111]; int vis[111]; int dis[111]; int N,Q; int prime(int pox) {原创 2013-04-20 14:03:23 · 766 阅读 · 0 评论 -
poj1679 判断最小生成树是不是唯一? 如果让我说:我只能说,实力决定一切。
思路:求次小生成树和最小生成树。 #include #include #include using namespace std; const int inf=1<<30; const int maxn=111; int ans1,ans2; int dis[maxn]; int map[maxn][maxn]; int iToj[maxn][maxn]; int vis[maxn]; int u原创 2013-04-24 22:31:46 · 6978 阅读 · 0 评论 -
uva11504 强连通+缩点+动态分配内存
思路:该题和HDU1287一样,不用计算最小的花费,蛋疼的是你必须动态分配内存,否则RE 就是找入度为0的连通分支的个数。 #include #include #include #include #include #include #define max 100009 using namespace std; int N,M; int X,Y,SCC; int tem; int n; stru原创 2013-04-14 20:10:50 · 619 阅读 · 0 评论 -
poj2117 tarjan()+割点
//题意:给你一个无向图不保证是连通的,去掉某一个顶点之后,询问最多可以形成的分支数目。 //思路: //1.处理孤立点的情况 //2.利用tarjan求解去掉的顶点,然后满足条件(最多). #include #include #include #include using namespace std; #define maxn 10001 typedef vector::it原创 2013-05-22 13:42:21 · 960 阅读 · 0 评论