2012年11月5日
摘要: 同Hdu 2119 Matrix.CODE:#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;#defineMAXN510#defineMAXM10010structEdge{intv,next;}edge[MAXM];intn,m;intcnt;intfirst[MAXN],link[MAXN];boolvis[MAXN];voidinit(){cnt=0;memset(first,-1,sizeof(first));memset(link,-1,sizeof(link 阅读全文
posted @ 2012-11-05 19:26 有间博客 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一个0/1矩阵,以及一把枪,一枪可以打掉同一行或者同一列上的1,问你最少几次可以把1全部变为0?思路:我们以x,y轴为顶点建立二分图,如果数字为1的话,那么就连一条边,其实就转换成了最小顶点覆盖的问题,然后用ED算法求二分最大匹配即可.注意:1、最大的匹配顶点数应该为n,所以for(int i = 1; i <= n; i++) ED(i);2、矩阵数据范围是1~100,所以最大的边数应该是100*100才对,否则RE.CODE:#include<iostream>#include<cstring>#include<cstdio>usingn 阅读全文
posted @ 2012-11-05 19:17 有间博客 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 首先,回顾一下二分图最小点覆盖的定义:二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边的覆盖),叫做最小点覆盖。最少点数=最大匹配数结合昨天看的介绍,,今天按照我的理解给出自己的证明(原创,仅作参考,欢迎讨论)从最大匹配数到底能不能覆盖所有的边入手。因为已知了最大匹配,所有再也不能找到增广路了,有最大匹配定义知。现在所有的边就剩下两种情况了,一种是匹配,一种是不匹配。假设所有的匹配边有n条,那么左右边就都有n个匹配边的顶点了,标记所有左边匹配边的顶点,则有n个。问题就是证明n=最小点覆盖,即证明最大匹配数n到底能不能覆盖所有的边入手。考察右边的匹配边的顶点,明显,左边都可以找到 阅读全文
posted @ 2012-11-05 19:00 有间博客 阅读(4859) 评论(1) 推荐(0) 编辑
摘要: 大意:给定雪花的六条边长,不论顺序,只要其中有两个雪花六条边的长度都相等,那么输出“Twin snowflakes found”,否则输出“No two snowflakes are alike.”数据范围:0 <n≤ 100000,each integer is at least 0 and less than 10000000思路:将每个状态映射进hash表里,由于不论顺序,我们可以在插入hash表的时候预排序一下,然后再映射进hash表里,如果找到,则标记。注意:如果找到的话,不能直接退出循环,因为题目要求是全部输入完,否则一定会影响后面的结果(影响输入),这里我WA了一次。COD 阅读全文
posted @ 2012-11-05 15:44 有间博客 阅读(567) 评论(0) 推荐(0) 编辑
摘要: . 阅读全文
posted @ 2012-11-05 12:46 有间博客 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 二分图最大匹配问题,这一类的问题难点往往不是算法上,难点在于从一个问题中抽象数学模型,然后去求解。WIKI百科传送门:二分图最大匹配二分图匹配的衍生问题:二分图最大匹配应用附上HDU 2063 例题代码。CODE:/*ED模板*/#include<iostream>#include<cstdlib>usingnamespacestd;#defineMAXN10010#defineMAXM100010structEdge{intv,next;}edge[MAXM];intn,m;intcnt;intgirl,boy;intfirst[MAXN],link[MAXN];bo 阅读全文
posted @ 2012-11-05 12:07 有间博客 阅读(272) 评论(0) 推荐(0) 编辑