随笔分类 -  图论

摘要:有向图强连通分量的Tarjan算法计算机科学 Add comments19,892 views[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kos 阅读全文
posted @ 2012-05-10 11:45 AndyDHG 阅读(189) 评论(0) 推荐(0)
摘要:题目信息:Alice's Chance解法: 利用最大网络流,以0表示源点,1表示汇点,以源点建立与每一天的边,边的容量是1,根据题目数据建立每周的给定的一天与每个电影之间的边,容量为1,建立每个film与汇点的边,容量为该部电影所需花费的时间,求出最大流和每部电影所花费天数的和比较,相等输出yes,否则输出No源代码://Accepted 2196K 922MS //很险差点超时 #include<iostream>#include<queue>#include<cstring>using namespace std;#define VEX 500 阅读全文
posted @ 2012-05-07 18:31 AndyDHG 阅读(208) 评论(0) 推荐(0)
摘要:INIT :g[][] 邻接矩阵CALL:res=MaxMatch();时间复杂度为o(VE)下面是二分图最大匹配的简单题(poj1274的代码),做出邻接矩阵后可以直接调用MaxMatch()函数使用: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 6 const int MAXN=202; 7 int uN,vN;//u,v数目,需要初始化 8 bool g[MAXN][MAXN];//g[i][j]表示xi与yj相连,也就是要初始 阅读全文
posted @ 2012-05-01 09:45 AndyDHG 阅读(353) 评论(0) 推荐(0)
摘要:并查集 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 int f[50001];//,r[30001]; 6 int m,n; 7 void Init() 8 { 9 for(int i=1;i<=m;++i) f[i]=i;10 //memset(r,0,sizeof(r));11 }12 13 int father(int k)14 {15 if(k !=f[k])16 return father(f[k]);17 return f[k];18 }... 阅读全文
posted @ 2012-04-02 13:32 AndyDHG 阅读(150) 评论(0) 推荐(0)
摘要:并查集 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 int f[30001],r[30001]; 6 int m,n; 7 void Init() 8 { 9 for(int i=0;i<m;++i) f[i]=i;10 memset(r,0,sizeof(r));11 }12 13 int father(int k)14 {15 if(k !=f[k])16 return father(f[k]);17 return f[k];18 }19 20... 阅读全文
posted @ 2012-04-02 12:58 AndyDHG 阅读(168) 评论(0) 推荐(0)
摘要:思路:0.从源点向每个猪圈引一条边,容量为猪圈里的猪的数量。1. 对于每个猪圈的顾客,从该猪圈向他连一条边,容量为猪圈里的猪的数量。2. 对于每个猪圈,如果不是第一个顾客,则上一个打开这个猪圈的顾客向这个顾客连一条边,容量为 +∞。3. 每个顾客到汇点连一条边,容量为各个顾客能买的数量。 1 #include<iostream> 2 #include<map> 3 #include<string> 4 #include<queue> 5 using namespace std; 6 7 int c[1101][1101]; 8 int flow[ 阅读全文
posted @ 2012-04-02 10:12 AndyDHG 阅读(229) 评论(0) 推荐(0)
摘要:#include<iostream>#include<map>#include<string>#include<queue>using namespace std;int nReceptacle,nDevice,nType,flag,res,node;int arr[600][600];int pre[600];int flow[600][600];map<string,int> PR;void Init(){ int i,j;//u,v,w, char str1[25],str2[25]; //freopen("a.txt 阅读全文
posted @ 2012-04-02 09:02 AndyDHG 阅读(195) 评论(0) 推荐(0)
摘要:1 #include<iostream> 2 #include<cstring> 3 #include<stack> 4 using namespace std; 5 #define N_MAX 27 6 7 bool map[N_MAX][N_MAX]; 8 int indegree[N_MAX]; 9 int outdegree[N_MAX];10 int n,m;11 char str[N_MAX];12 bool floyd()13 {14 for(int k=0;k<n;++k)15 for(int i=0;i<n;++i)16 f.. 阅读全文
posted @ 2012-04-01 11:13 AndyDHG 阅读(155) 评论(0) 推荐(0)