随笔分类 - 图论--二分图
摘要:hdu1150最小顶点覆盖hdu149850 years, 50 colors最小顶点覆盖 +枚举 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include1...
阅读全文
摘要:hdu1179Ollivanders: Makers of Fine Wands since 382 BC.裸最大匹配 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9...
阅读全文
摘要:最近遇到二分图匹配的题目,发现不怎么会,重新把之前的题目看了看,做下总结吧。http://poj.org/problem?id=1469 纯纯的二分图的最大匹配 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 vectorpa[410];11 int vis[410],mat[410];12 int find(int u)13 {14 int i;15 for(i = 0 ; i >t;32 ...
阅读全文
摘要:1109二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因这题就是说 有n+m个人参加会议 要在这n+m中进行通话 求最少的连接数 就是每个人都得被连接上 这样求最大匹配就是了 再用总结点数减匹配的 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 vectored[2010]; 9 int n,m,k,vis[2010],link[2010];10 int find(int u)11 {12 int i;13 for...
阅读全文
摘要:1106结点染色 当前结点染为黑 朋友染为白 依次染下去这题是为二分图打基础吧 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 vectored[110]; 9 int vis[110],num;10 void dfs(int u,int c)11 {12 int i;13 vis[u] = c;14 if(c==1)15 num++;16 for(i = 0 ; i < (int)ed[u].size() ; i++)...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4635tarjan缩点 统计缩点后每个结点的出度入度 将那个包含原来点数最少的 且出度或者入度为0的大节点看作一个整体内部连边n*(n-1)个 连全部的; 其它的点为一整体连全部的 再两者连一同向的边 保证它的出度或者入度依旧为0的情况下任意连 最后减去原来的边M 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 100010 8 #define M 100010...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4619二分图匹配 最小点覆盖 = 最大匹配 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int map[1010][1010]; 7 struct node 8 { 9 int x,y;10 }p[1010],q[1010];11 int n,m,vis[1010],link[1010];12 int judge(int i,int j)13 {14 if(p[i].x>n>>m)42 {4...
阅读全文
摘要:http://poj.org/problem?id=2942代码敲的迷迷糊糊的 照把书上的给搬上来的给篇讲的不错的解题报告 各种定义都有 http://blog.csdn.net/lyy289065406/article/details/6756821做这题之前 一定要把相关定义搞清楚 割点 双连通分量 二分图 奇圈View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h&g
阅读全文
摘要:http://poj.org/problem?id=3020最小路径覆盖,拆点,总结点数 = 匹配数*2+未匹配节点,所以所用天线数就等于匹配数+未匹配数=总结点-匹配数。由于拆点后,多加了边,匹配数变成了原来的2倍,有向图-》无向图,匹配数增加的是一样的。View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 int link[500],map[500][500],ma[50
阅读全文
摘要:http://poj.org/problem?id=1422题意:一个镇上有很多街道,很多十字路口,无循环,把伞兵放在各个十字路口上,使之能把所有的街道都走过,求最小的伞兵数。最小路径覆盖=节点数-最大匹配。模板题View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int map[200][200],link[200],vis[200]; 6 int find(int x,int n) 7 { 8 int i,j; 9
阅读全文
摘要:http://poj.org/problem?id=2226模板抄错,结果错了一下午。将连续横行上的*和连续纵桁上点分别看做两个点集,连接两集合中点的边就是图中的点。即求最小顶点覆盖最多的边。最小点覆盖=最大匹配。有篇图片的讲解,挺好,很形象。http://ip96cns.blog.163.com/blog/static/170095192201117465473/View Code 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 in
阅读全文
摘要:【基本概念】:二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。最大匹配:给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配. 选择这样的边数最大的子集称为图的最大匹配问题,如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹.
阅读全文