上一页 1 2 3 4 5 6 7 ··· 30 下一页
  2012年11月5日
摘要: 首先,回顾一下二分图最小点覆盖的定义:二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边的覆盖),叫做最小点覆盖。最少点数=最大匹配数结合昨天看的介绍,,今天按照我的理解给出自己的证明(原创,仅作参考,欢迎讨论)从最大匹配数到底能不能覆盖所有的边入手。因为已知了最大匹配,所有再也不能找到增广路了,有最大匹配定义知。现在所有的边就剩下两种情况了,一种是匹配,一种是不匹配。假设所有的匹配边有n条,那么左右边就都有n个匹配边的顶点了,标记所有左边匹配边的顶点,则有n个。问题就是证明n=最小点覆盖,即证明最大匹配数n到底能不能覆盖所有的边入手。考察右边的匹配边的顶点,明显,左边都可以找到 阅读全文
posted @ 2012-11-05 19:00 有间博客 阅读(4861) 评论(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) 编辑
摘要: 二分图最大匹配问题,这一类的问题难点往往不是算法上,难点在于从一个问题中抽象数学模型,然后去求解。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) 编辑
  2012年11月4日
摘要: 大意:让你求无向图的桥(割边)思路:一次查询,重建一次图,然后求一次割边,TLE。去网上开了看资料,可以用LCA暴力查询,唔,改天看看LCA。TLE CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;#defineMAXN100010#defineMAXM500010structEdge{intv,next;}edge[MAXM];intfirst[MAXN],low[MAX 阅读全文
posted @ 2012-11-04 21:38 有间博客 阅读(342) 评论(0) 推荐(0) 编辑
  2012年11月3日
摘要: 大意:求一个无向图的割边,其中可能有重边。思路:Tarjan求保存割边,排序输出。不知咋的,数组开到题目给定的100010会报错,改成200020就行了,KD啊。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;#defineMAXN10010#defineMAXM100010structEdge{intv,next;intid;}edge[MAXM*2];intfi 阅读全文
posted @ 2012-11-03 21:57 有间博客 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 大意:听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至少得花多少电话费就能让所有人都被通知到吗?思路:强连通+缩点,然后统计入度为0的点,然后枚举每个SCC中花费最小的值相加,即cost[belong[i]] = min(cost[belong[i]], money[i]);CODE:#include<cstdio>#includ 阅读全文
posted @ 2012-11-03 16:36 有间博客 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 大意:求割顶的数量以及删除割顶之后子图的数量。思路:Tarjan算法求割顶,同POJ 1144 NetWork.CODE1:#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>usingnamespacestd;constintMAXN=100010;constintMAXM=500010;structEdge{intv,next;}edge[MAXM];intdfn[MAXN],low[MAXN],sub[MAXN];intfirst[MAXN];intN,M 阅读全文
posted @ 2012-11-03 11:23 有间博客 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 无双图求割顶的个数,Tarjan模板。我这里有两种模板,似乎第一种比较简单。CODE1:#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>usingnamespacestd;#defineMAXN110#defineMAXM10010structEdge{intv,next;}edge[MAXM];intfirst[MAXN];intdfn[MAXN],low[MAXN];intsub[MAXN];//保存的删除该节点之后,图分散变成子图的数量。intn;int 阅读全文
posted @ 2012-11-03 11:17 有间博客 阅读(174) 评论(0) 推荐(0) 编辑
  2012年11月2日
摘要: 求最少加几条边使得该图变双连通图,有重边。思路:求出双连通分量然后“缩点”之后去求叶子节点。判断入度为1的缩点,ans = (leaf+1)/2;注意判重边,因为重边可能影响Tarjan算法中的low[u]的值。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<queue>usingnamespacestd;#defineMAXN50010#defineMAXM100010structEdge{intv,next;}edg 阅读全文
posted @ 2012-11-02 20:46 有间博客 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 如果出现遍历图中的某个点都是在奇数时刻或者偶数时刻,那么小偷的藏点就是根据时间判定在某些的奇数点和偶数点了。如果图出现奇数的环,即:有一个环由奇数个点组成,那么环中的某个点在奇数和偶数时刻都能到达(可以画图试试)。其实奇数环导致小偷藏点无规律的最大原因是:在遍历最后奇数环的两个(必定是两个)未遍历点的时候他们是同奇(偶)的,然而还有一条边直接相连。导致在下一时刻,那两个点又可以同时变成偶(奇)。如果在回溯遍历的话,就会出现整张图在奇数时刻或者偶数时刻都能到达。 无向图G为二部图的充分必要条件是:G至少有两个顶点,且其所有回路的长度均为偶数。如果我们把图中奇数时刻能够到达的点归到X集合,偶数能到 阅读全文
posted @ 2012-11-02 17:15 有间博客 阅读(359) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 30 下一页