2012年5月22日
摘要: POJ_3621 首先,符合要求的环一定是一个简单环,不妨假设最优路线是由两个简单环x、y组成。如果x的平均值和y的平均值一样,那么选择x或y中任意一个简单环都是满足要求的,如果x的平均值和y的平均值不一样,那么加权之后一定比较大者要小,因此一定会挑那个平均值较大的简单环作为最优解。因此最终最优路线一定是简单环。 接着就可以像求解最优比率生成树那样用0-1分数规划求解了,需要注意为了能够转化成求最短路、判负圈去解,那么0-1分数规划的表达式最终一定要变形成求某个表达式最小值的形式,这样每次二分的时候再依据这个表达式重新对边权赋值后求判负圈即可。#include<stdio.h>#i 阅读全文
posted @ 2012-05-22 18:36 Staginner 阅读(305) 评论(0) 推荐(0)
摘要: ZOJ_2676 这个题目可以像最优比率生成树那样用0-1分数规划去做,只不过最优比率生成树每次是求一棵生成树,而这个题目要求一个最小割。 对于每次二分,在建图的时候可能会出现边权为负的边,由于通过分析后可知这些边一定会选,所以就没必要再将其加入到新建的图中了。 最后要输出最小割集,求最小割集的时候可以用DFS遍历做完最大流之后的图,且只能沿没有满流的边向下走。遍历完成后,如果某条边有一个端点遍历到了而另外一个端点没有遍历到,那么就说明这条边是属于最小割集中的。#include<stdio.h>#include<string.h>#include<algorith 阅读全文
posted @ 2012-05-22 16:08 Staginner 阅读(396) 评论(0) 推荐(0)
摘要: UVA_11255 应用burnside引理,关键在于对于每种置换求出不动方案的种数。import java.math.BigInteger;import java.util.Scanner;public class Main { static int MAXD = 50; static Scanner cin = new Scanner(System.in); static int N, P, pn; static int[] a = new int[5], b = new int[5], prime = new int[MAXD], p = new int[MAXD... 阅读全文
posted @ 2012-05-22 06:16 Staginner 阅读(400) 评论(0) 推荐(0)
摘要: USTC_1130 时隔多日,回过头在再做这个题目时终于AC了,于是顿时觉得能力的提升确实需要时间的积淀。 首先,如果Alice会输,那么各个棋子所在位置的sg函数值的异或必然为0,于是我们可以先预处理出各个节点的sg函数值。 至于求方案,一开始的想法就是去dp了,比如用f[i][j][k]表示到第i个节点时放了j个棋子,且它们异或值为k的方案总数。这样i的上限是100,j是10000,k是128,这样的复杂度显然是不能承受的。 我们联想到异或的性质,偶数个同一个数的异或为0,因此,整个局面的sg函数值,实际上只与每个节点上棋子数目的奇偶性有关,而剩下的棋子则两个两个的看成一组,放在哪... 阅读全文
posted @ 2012-05-22 00:12 Staginner 阅读(160) 评论(0) 推荐(0)