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