2011年9月30日
摘要: 表示被这道题整得辛苦。刚开始是P=40005写成了P=4005。wa了无数次之后才发现是这个问题。然后是tle。因为刚开始因为最大流做题惯性有邻接表来存储。一直tle好久。然后再恍然大悟要用邻接矩阵。思路其实挺简单:有典型套路可做。这题很明显就是要“最短路”,但是这里的最短路是最长的权值最短,不是精确意义上的最短路。然后再有一个约束就是要求出好几条不重叠的“最短路”,不重叠!套路是用二分+最大流来做,将边得权值都设为1。如果重边则1+1=2,再重则3。挺典型的。#include<iostream> #include<algorithm> #define MIN(a,b) 阅读全文
posted @ 2011-09-30 23:42 不是我干的 阅读(376) 评论(0) 推荐(0)
摘要: 题意很显然,但是要注意product是有乘积的意思,即这次比较特殊的是不是求权值和最小,而是权值积最小。思路:1.权值积最小记得要用对数来处理。2.熟悉二分图最大匹配的就可以看出其实这题是个二分图最小权值点覆盖。二分图的X是行,Y是列,如果有伞兵(i,j)即有响应的x集合的点到y集合的点的边。幸运的是,这些边没有权值,(即在下面构造的在流网络中权值为inf)。但不能因此直接用最大匹配算法。因为每个点有权值。3.所以这里要用到最大流最小割的原理,设定源点和汇点。源点连接X集合的每个点的边的权值为X集合每个点的权值,同理汇点连接Y集合。这样就转化为一个典型的流网络。下面是代码,但是一直wa,可能是 阅读全文
posted @ 2011-09-30 13:35 不是我干的 阅读(222) 评论(0) 推荐(0)