随笔分类 - Graph Match
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1054题意:给你一棵树,n顶点,n-1条边,让你找到最少的顶点覆盖树上的所有边,即最小顶点覆盖可以用匹配做(二分匹配的版题),也可以用树形DPdp[s][0]表示以s为根的子树在s点不放的情况下的最小顶点数dp[s][1]表示以s为根的子树在s点放的情况下的最小顶点数则:dp[s][0]=sigma(dp[ss][1])(ss表示s的子节点)(子节点必须放)dp[s][1]=sigma(min(dp[ss][0],dp[ss][1]))(ss表示s的子节点)(子节点可放可不放)则min(dp[0][0],dp
阅读全文
摘要:http://acm.sgu.ru/problem.php?contest=0&problem=286先找欧拉回路,再做二分匹配,输出匹配有一道题和这个很像:HDU 3551 Hard Problem(带花树匹配)但是这道题用带花树内存开不下匹配的数组。。。 1 /** 2 *先找欧拉回路,再做二分匹配,输出匹配 3 *场上想的是用带花树做,因为之前做过一道类似的题:HDU 3551 Hard Problem 4 *设边e(u,v),则将(u,e) (v,e') (e,e')连起来 5 *注意u有deg[u]-D[u]-1个顶点,v同样,e,e'表示将边e拆成e
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3551终于把带花树专题刷完了题意:给定一个无向图,问能否删除一些边使得所有顶点的读数为给定的度数方法:这道题看网上有用网络流解的,这里用带花树做匹配来解。先预处理所有的顶点的度数deg,然后与给定的度数D比较。设边e(u,v),则将(u,e) (v,e') (e,e')连起来,注意u有deg[u]-D[u]-1个顶点,v同样,e,e'表示将边e拆成e和e'两个顶点,然后用带花树算法做匹配,如果有完美匹配则输出YES,否则输出NO。(想一下,如果有完美匹配就表明这些多余的边能够直
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3726将同在L范围内的棋子建立边,然后做一般图的最大匹配(带花树算法),如果是完美匹配则输出YES;否则输出NO。如果有完美匹配的话,顺着匹配拿掉棋子即可使后手赢。 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 1
阅读全文
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1099贴板题,找一般图的最大匹配数,并输出最大匹配 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #incl
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4687题意:找到所有的最大匹配,然后输出不在任何最大匹配中的边的序号解法:贴板题,一般图的最大匹配,带花树算法,然后求暴力枚举去掉一条边的最大匹配数与原最大匹配数比较赛后才知道带花树算法直接用的标程的带花树算法的模板。。。 1 /** 2 *版题。。。之前不知道这个算法。。。 3 *一般图的最大匹配:带花树算法 4 *暴力枚举去掉一条边的最大匹配数与原最大匹配数比较 5 * 6 *@Author: xiaohai 7 */ 8 //#pragma comment(linker, "/STACK...
阅读全文
摘要:http://poj.org/problem?id=1904方法同HDU 4685 2013多校8 1010,只是那道题需要自己找匹配,这道题已经给定了匹配了。根据初始给定的匹配直接找强连通分量,在同一强连通分量的人可以配对。这题试了一下std::ios_base::sync_with_stdio(false);,加了这句cin比scanf竟然还快。。。。。。 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include 3 #include 4 #include 5 #include 6 #inc
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4685先找最大匹配数ret然后把将n这一边的大于n的m-ret与m这一边的n+m-ret边连起来,将n这一边的n+m-ret与m这一边的大于m的n-ret连起来,做最大匹配,得到一个匹配然后根据这个匹配找强连通分量,属于同一强连通分量的priceness和price可以任意配同一强连通分量的所有priceness可以给同一强连通分量的price。用hopcroft-karp算法890ms,用匈牙利算法2656ms。。。顺便在代码中附上hopcroft-karp算法和找强连通分量的模板~ 1 /** 2 *..
阅读全文