2013年1月27日

【转】二分图总结

摘要: 二分图匹配算法总结二分图最大匹配的匈牙利算法二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。最大匹配:图中包含边数最多的匹配称为图的最大匹配。完美匹配:如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖:最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则在二分图 阅读全文

posted @ 2013-01-27 22:28 acoderworld 阅读(101) 评论(0) 推荐(0)

HDU 1856 More is better

摘要: 并查集,定义一个新的数组更新集合节点个数,模板题。。输入为0,输出为1。开始多此一举还改成了零,没能理解好题意。。代码: 1 #include<stdio.h> 2 int p[10000001],s[10000001],mmax; 3 int findx(int x) 4 { 5 if(x!=p[x]) 6 p[x]=p[findx(p[x])]; 7 return p[x]; 8 } 9 void merge(int x,int y)10 {11 int fx=findx(x);12 int fy=findx(y);13 if(fx!... 阅读全文

posted @ 2013-01-27 22:26 acoderworld 阅读(53) 评论(0) 推荐(0)

HDU 2063 过山车

摘要: 二分图匹配入门基础题,脑残的map没有初始化,导致WA了几次。不多说,上代码。。。 1 #include<iostream> 2 using namespace std; 3 int visit[1500],map[1500][1500],dx[1500],dy[1500],nx,ny; 4 int dfs(int v) 5 { 6 for(int i=1;i<=ny;i++) 7 { 8 if(map[v][i]&&!visit[i]) 9 {10 visit[i]=true;11 if(!dy[... 阅读全文

posted @ 2013-01-27 22:20 acoderworld 阅读(43) 评论(0) 推荐(0)

导航