摘要:
题意:http://www.nocow.cn/index.php/Translate:Sgu/326题解:抑郁,机房的“学长”上课吵死了,心烦意乱的写了这个题,一直wa,最后发现忘了特判,网络流出现负权边了。。。明确思想,1这个人剩下的比赛都赢(包括和组外的人比的比赛,简称组外赛),与1同小组的其他人,组外赛全输,小组内部的比赛就是网络流需要分配的结果~思路见:http://www.cnblogs.com/proverbs/archive/2013/01/07/2850366.htmlView Code 1 #include <iostream> 2 #include <al 阅读全文
摘要:
题意:FJ有n个农场,要从1号农场走到n号,再从n号走到1号(回来的路不能重复,不一定走完所有景点,只要求从1到n即可),给你一些景点之间的路的长度(双向),问你最短需要走多少路才能回来?题解:不同于双调旅行商问题(dp),因为距离不符合单调性。用最小费用流,还是很裸的~View Code 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 6 #define N 1010 7 #define M 100100 8 9 usin 阅读全文
摘要:
题意:给出一些权已知的点(剩下的点的权未知),以及所有点之间的边的关系,每条边的权是其两端点的点权值的异或值,求未知点的权是什么的时候所有边权的和最小题解:amber的论文题,简直太绝了!http://kanboxshare.com/link/v0yHI2oUoSNMCo8mAmj1Bxy0mqMIH6tZNUsbGxG4mvu3FNl9FfiODWiEmdvTHKBRNUbpNxELmvNwA2rCFwu1DeAXb0I7HoBFNmIvNVIXmNYmFNl43dPYfIaGnVeFDB5XszPnT5jttcdCQ思想就是按位做32遍最小割。View Code 1 #include .. 阅读全文
摘要:
题意:给出一个带权无向图,给出图中a,b两个点,已知切断一每条边都会产生与这条边权值相同的消耗,切断某些边可以使得a,b之间不连通,在已知一个切边方法消耗最小的方法,判断是否存在与此切割方法消耗相同的方法。题解:判断最小割的唯一性!就是老样子从S沿着非满流的正向边遍历点的总数k1,从T沿着非满流的正向边遍历的点的总数k2,若k1+k2=n(总点数)时最小割唯一。哎,成了结论了,不会证明。。后来又想怎么求最小割的总方案数,也不会。。求大神解释!View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include & 阅读全文
摘要:
题意:二维平面上有n个浮冰(用坐标表示浮冰位置),开始时每个浮冰上有一些企鹅,现在企鹅需要聚到某一个浮冰上,因此需要从一个浮冰跳到另一个浮冰上。浮冰比较特殊,每次企鹅跳离该浮冰时,由于反弹作用,浮冰会消融一部分,现在告诉,每块浮冰的坐标(xi,yi),每块浮冰最多可以被企鹅跳的次数(ni),每块浮冰上初始的企鹅数量(mi)以及企鹅可以跳跃的最大距离D。求这些企鹅最后可以在哪些浮冰上汇聚。输出可以汇聚的浮冰序号,下标从0..n-1,如果不能汇聚,输出-1。题解:枚举汇聚的那块浮冰为T,最大流求解。关键是怎样限制点的出度数(浮冰会融化!),以前好像谈到过,就是拆点。拆成2n个点(i和(i+n)对应 阅读全文
摘要:
题意:N个点M条边的有向图,给出如下两种操作。删除点i的所有出边,代价是Ai。删除点j的所有入边,代价是Bj。求最后删除图中所有的边的最小代价。其实就是二分图最小点权覆盖。定义:从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。题解:拆点。n个点拆成2n个点(左右各n个,i与(i+n)对应,之间连容量INF的边),S和i连容量为Ai的边,(i+n)与T之间连容量为Bi的边,求最小割即可这样做为什么对呢?当一条边存在的条件就是网络中还存在从S到T的非满流边!方案输出不多说。。View Code 1 #include <cstdio> 2 #include 阅读全文
摘要:
题意:有一些模块(modules)和一个双核处理器,一个模块可以在任意一个核上处理,每个核对应每个模块有个开销。现在有一些模块间需要数据交换,如果需要数据交换的模块在一个核上处理,则不需要额外开销,否则需要加上一个开销。现在需要完成所有模块,问最小需要多少开销。如果没有这个额外的开销,那么每个模块只要选择开销小的那个核就行了。额外的开销给选择加上了限制。题解:最小割模型。S和T分别表示两个核,每个模块和S,T连边求最小割就是了~View Code 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstrin 阅读全文
摘要:
题意:火星人侵略地球,他们意图登陆破坏某个地区的兵器工厂。据探子回报,火星人登陆的地区为n*m大小的地域,而且每一个火星人的着陆点坐标已知。火星人很强悍,只要有一个火星人着陆后能够幸存,他必定能毁坏这片区域的全部兵工厂。为了防止这种情况发生,必须保证在火星人着陆的一瞬间把他们全部同时杀死。现在防卫队有一个激光枪,开一枪就能把 在同一行(或同一列)着陆的火星人全部杀死。但是这种激光枪的使用是有代价的,把这种激光枪安装到不同行的行首、或者不同列的列首,费用都不同。现在已知把激光枪安装到任意位置的费用,总的花费为这些安装了激光枪的行列花费的乘积。问怎样安装激光枪才能在杀死所有火星人的前提下费用最少? 阅读全文
摘要:
题意:在一个网络里面,问增大哪条边的容量可以使整个网络的流量增大,输出这种边个数。题解:显然这些边是最小割边集的子集。对于边u-->v,当且仅当能从S沿着非满流的正向边遍历到u,从T沿着非满流的正向边遍历到v时,边u-->v是满足题意的边两遍dfs求解~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 1000 8 阅读全文
摘要:
题意:有n个房间,要确保一个特定房间不能进坏人(初始有若干房间有坏人)。相邻的房间可能会有门,但是门上的锁是单向的(只能从一个房间打开进入另一个房间,a b ,只能从a进入b 不能从b 进入a),初始所有的锁都是开着的,问至少关上几个锁,才能不让坏人进入那个房间。题解:人不就相当于流么?!最小割~不想说建图了,唯一要注意的就是锁是单向的。对于a和b之间的门,若a有锁,b没有锁,那么连接a-->b容量INF(这个门锁了白锁,坏人自己能打开),b-->a容量1困了,今天不想写题了。。就只想了想怎么建图。。代码参考:http://blog.sina.com.cn/s/blog_6af66 阅读全文