10 2015 档案

摘要:题意:有男孩和女孩,男孩之间全部认识,女孩之间全部认识,一部分男孩和女孩认识,现在希望选出一些孩子,这些孩子都相互认识。 方法:正的做不好做,观察他的补图,补图之间无关系的边就是原图有关系的。补图中的独立集不正是相互都没有连边么,反过来说,它们在原图中不正是两两都有连边么。 最小割: 二分匹配: 阅读全文
posted @ 2015-10-31 15:34 sweat123 阅读(275) 评论(0) 推荐(0)
摘要:题意:有一张图,对于每个点,有出边和入边,现在目的是删除改图的所有边,对于每个点,删除出边的花费Wi-,删除入边的花费Wi+,现在的目的求删去所有边后的花费最小。 建图方法:对于每个点i,拆点为i,i+n,对于入边,从i+n想汇点T连边,值为入边花费;对于出边,从S向i连边,权值为出边花费。m组相连 阅读全文
posted @ 2015-10-30 21:01 sweat123 阅读(594) 评论(0) 推荐(0)
摘要:二分图大概有一下几个性质: 1.点覆盖集:集合中的点:图G中每一条边的至少有一个顶点在这个集合中; 2.点独立集:集合中的点:任意2个点在图G中都不相邻。 3.路径覆盖:在图中找一些路径(注意是路径不是边!!),这些路径覆盖图中所有的顶点,每个顶点都只与一条路径相关联。 a为覆盖集,b为独立集。 图 阅读全文
posted @ 2015-10-30 19:19 sweat123 阅读(271) 评论(0) 推荐(0)
摘要:题意:有N个城市,M个公司。现在需要建立交通是获得的利益最大。如果2个公司A,B, A修的路为Xa->Ya,B的路为Xb->Yb,如果Ya==Xb,那么这2个公司有关系。 对于每个公司都有获得的税,和需要付出的价值。求最大能够得到的利润为多少。 分析: 很明显是最小权闭合图。最大获利=总共的值-(付 阅读全文
posted @ 2015-10-29 16:00 sweat123 阅读(138) 评论(0) 推荐(0)
摘要:基础题。 最小割后,与汇点相连的点都不要,然后从源点出发dfs一遍有多少相连的点即可。 阅读全文
posted @ 2015-10-29 14:33 sweat123 阅读(147) 评论(0) 推荐(0)
摘要:若a,b 2点能够相连,那么可以得到ci的价值,也就是说a,b是得到c的前提条件,对于每一个点,又有耗费。 对于本题,先求出最多能够得到的利益有多少,最小割=未被 选的用户的收益之和 + 被选择的站点的成本之和,要尽量的小。 分析: 把每个用户和每个站点都看成一个顶点。建立网络,从源点S向每个用户连 阅读全文
posted @ 2015-10-28 21:58 sweat123 阅读(155) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html 性质: 最大权闭合图的权值=原图中权值为正的点的和-最小割; 闭合图:在一个图中,我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终 阅读全文
posted @ 2015-10-26 22:51 sweat123 阅读(194) 评论(0) 推荐(0)
摘要:开始敲了一发线段树,觉得可以暴力一点的过,tle了。后来进行修改,发现了问题。 后来一看大神的做法,由于1<=k<=10,所以对于不同的k,有55个余,找答案的时候只要找不同的k值满足条件的值。 成段更新时,更新全部的树即可。 阅读全文
posted @ 2015-10-24 22:39 sweat123 阅读(325) 评论(0) 推荐(0)
摘要:一遍的话秩序要dp就好,但是这里要删去点。此题可以转化为最小费用流。开始我想了半天纠结怎么处理到过一次后值变0,看了书之后发现拆点解决了这个问题。 对于点t,拆为t-->t',容量为1,费用为负的矩阵的值,那就解决了只能一次。如果2个点连通,s-->t,就相连,s-->t,s-->t',t'->s' 阅读全文
posted @ 2015-10-23 19:25 sweat123 阅读(255) 评论(0) 推荐(0)
摘要:这题也可以用km做,我写的代码km比费用流快很多。 最小费用流: km: 阅读全文
posted @ 2015-10-22 12:57 sweat123 阅读(126) 评论(0) 推荐(0)
摘要:对于最小费用流,基本的思想和最大流类似,不断寻找增广路增广,只是此时还要考虑费用问题。 寻找最大流的方法是从某个可行流出发,找到关于这个流的一条增广路P; 沿着P调整f,对新的可行流又试图寻找关于它的增广路,循环直至不存在增广路为止; 如果f是流量为f1的可行流中费用最小者,而p是关于f的所有增广路 阅读全文
posted @ 2015-10-20 23:24 sweat123 阅读(488) 评论(0) 推荐(0)
摘要:A*算法超内存。 对于最短路,我们可以维护dis[]数组,来求得最短路,但是此题有次短路,所以定义dis[][2],dis[][0]表示最短路,dis[][1]表示次短路;cnt[][2],cnt[][0]表示最短路条数,cnt[][1]表示次短路条数。 更新时: 如果小于最短路,更新dis[][0 阅读全文
posted @ 2015-10-19 22:10 sweat123 阅读(351) 评论(0) 推荐(0)
摘要:启发函数:f(x)=g(x)+h(x); g(x)表示初始点到x状态的代价,h(x)表示从x的状态到目标状态的代价的估计值(并不是真实的),实际最小代价<=h(x); 起点s,终点t,x.v=s,x.len=0;然后优先队列中f(x)值最小值出队列,再根据出队列的x.v状态发展下一层。如果出队列时第 阅读全文
posted @ 2015-10-18 22:46 sweat123 阅读(676) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std; const int maxn = 32; const int INF = 99999999; int map[maxn][maxn],n,m,dis[maxn][maxn]; int max(int x,int y) { return x>y?x:y; } int floyd() { ... 阅读全文
posted @ 2015-10-13 22:30 sweat123 阅读(182) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #include using namespace std; struct node { char s[60]; int v; int flag; int cou; }a[300]; bool cmp(node fa,node fb) { if(fa.v!=fb.v) ... 阅读全文
posted @ 2015-10-13 22:30 sweat123 阅读(135) 评论(0) 推荐(0)
摘要:因为行可以了,那列就不行,所以根据行列建立最小割模型。 然后这题精妙之处在于把乘法取对数后转化为加法,瞬间就简单了。 保证精度,C++AC ,16MS G++WA。 阅读全文
posted @ 2015-10-11 22:44 sweat123 阅读(191) 评论(0) 推荐(0)
摘要:最大流之后S集合与T集合不在相连,即s不能到达T中的点。 对于同一个模块,Ai,Bi,Ai与源点相连,Bi与汇点相连。不同CPU间消耗的模块,相连。 由于最后模块只能在一个CPU中运行,所以要么与源点相连,要么与汇点相连,所以可看做最小割模型。 我原来的Dinic模板,不是多路增广,所以超时。然后向 阅读全文
posted @ 2015-10-11 16:33 sweat123 阅读(431) 评论(0) 推荐(1)
摘要:对于欧拉回路,先判断出度入度的差是否为偶数,然后最大流一次。 此题是判断有无欧拉通路,前提要判断图是否连通,然后欧拉通路的条件:要么出入度差没有奇数,或者只有2个点。 所以先统计差为奇数的个数,如果不为0或2,不可能。然后如果为2,表示可能使欧拉路,所以此时可以将这两个点相连,类似添加一条无向边。然 阅读全文
posted @ 2015-10-11 15:15 sweat123 阅读(244) 评论(0) 推荐(0)
摘要:欧拉路:经过所有路有且仅有1次,可以路过所有的点。 无向图: 图连通,所有点都是偶数度,或者只有两个点是奇数度。当所有点是偶数度时欧拉路起点可以是任意点;当有两个奇数度点时起点必须是奇数度点。 有向图: 图连通,所有点出度=入度,或者有一个点入度-出度=1,有一个点出度-入度=1。同样,当所有点出度 阅读全文
posted @ 2015-10-10 10:32 sweat123 阅读(229) 评论(0) 推荐(0)
摘要:RMQ预处理最大值,最小值,然后对于每一点,二分可能满足的区间长度,长度-1就是该店开始的区间满足的个数。 阅读全文
posted @ 2015-10-08 22:31 sweat123 阅读(237) 评论(0) 推荐(0)
摘要:比较简单。 阅读全文
posted @ 2015-10-08 14:23 sweat123 阅读(239) 评论(0) 推荐(0)