上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 25 下一页
摘要: 以前总结过无向图最小割的最大流算法,n^2的枚举起点和终点,这个题必然tle于是又学习了专门的算法:Stoer-Wagner算法就是利用prim求最大生成树,将最后扫到的两点合并,执行n-1次,最终合并成一个点参考资料:http://kanboxshare.com/link/gCrQIYPJvdwCxGlOUwU5U3yxNNIiW2cUxIhddx7T60uYmiiO2heSC1rULa5tjEbf3MLRsM8QRKYGzoZhd8abNaUkeView Code 1 #include <cstdio> 2 #include <cstring> 3 #include 阅读全文
posted @ 2013-01-08 00:01 proverbs 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 题意:有N块田,每块田下雨时可以容纳a[i]头牛,每块田现在有b[i]头牛,给出一些田与田之间的无向路径及距离,问下雨时最少多少时间后所有牛都能到避雨的地方。题解:明显又是二分答案。floyd求取两点间最短路PS:要用long long!!!一开始我想的是三层的图:①n个点表示n块田 ②和③各n个点(灭个点i和i',拆点限制容量)S连①中的点容量a[i],表示一开始有a[i]头奶牛在i点①中的点连②中的i,当且仅当两块田之间的距离小于二分值时②和③对应点相连,限制流量③中的点和T连INF的边这样果断tle了。后来发现③中的点没有用,直接在②和T之间限流即可,优化后就ac了~View C 阅读全文
posted @ 2013-01-07 23:56 proverbs 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题意:问从起点到终点有T条不相交路径的最大边的最小值。题解:典型的二分答案!最大流还真爱和二分一起出啊~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 1000 8 #define M 1000000 9 #define INF 1e9 10 11 using namespace std; 12 13 int head[N] 阅读全文
posted @ 2013-01-07 23:45 proverbs 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题意:有n(n<=10)个竞赛者,进行了n*(n-1)/2次的比赛。已知每一个竞赛者在比赛中胜利的次数a1、a2、a3........an。(次序列是从小到大排序的),问你这n个人中最强的竞赛者最多有几个。(如果这个竞赛者胜利的次数最多或这个竞赛者打败了所有胜利次数比他多的竞赛者,那么这个竞赛者就是最强的。其中每两个人有且仅进行一场比赛。)题解:这个题简直太绝了!我只想对了一半,最后还是看了题解。。。做法大概就是二分枚举最强者的个数(数量比较少,就直接枚举了。),越胜场多的成为强者的几率越高。所以枚举最强的k个人就是胜场最多的k个人若a,b(a,b都属于枚举的最强者的集合)之间的比赛为c 阅读全文
posted @ 2013-01-07 23:42 proverbs 阅读(723) 评论(0) 推荐(0) 编辑
摘要: 题意:一个公司打算解雇一些员工,已知解雇每个人的收益值(可能为负)。解雇某一个人后,他的下属也将被解雇,求最大收益是多少,在取得最大收益时需要解雇多少人。题解:建图不多啰嗦,挺裸的~求最少的割边数目,可以从源点对残量网络进行一次DFS,每个割都会将源点和汇点隔开,所以从源点DFS下去一定会碰到某个割dfs停止,这时遍历过的点数最少的裁员数目。那种直接找满流边的做法是显然不对的奥~ps:总是wa盛怒之下,把所有int替换了ac了。。。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstd 阅读全文
posted @ 2013-01-07 23:27 proverbs 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题意:有m个订单,每个订单都能获取一定的收益,但是完成每个订单都需要购买不同的机器,求最多能挣多少钱,需要完成哪些订单,购买哪些机器。题解:最大权闭合图建图,S连所有的订单,边容量为利润,订单连所有的机器,边容量为INF,机器连T,边容量为成本。关键是求方案。我想的是dfs图找割边。。和网上的做法效果上应该是一样的。。网上大多都是分两次bfs找的~代码请参考:http://blog.sina.com.cn/s/blog_68629c770100z2v9.html写了一天网络流,实在不想写了。。。偷懒了~ 阅读全文
posted @ 2013-01-07 23:15 proverbs 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题解:边由被限制节点指向限制节点View Code 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cstdio> 6 7 #define N 120000 8 #define M 2000100 9 #define INF 1e910 11 using namespace std;12 13 int head[N],next[M],to[M],len[M];14 int layer[N 阅读全文
posted @ 2013-01-07 23:00 proverbs 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 题意:有k个牛奶机跟c头牛。他们之间有路相连,农民想让每个牛能到其中一个牛奶机,又想让走路最远的牛走得最小。题解:求最大值最小,不出意外就是二分了由于要限制总的路径长度,就不能对每条边限制了,于是先floyd求最短路,再二分最长路即可~不连大于二分值的路径,连小于等于二分值的路径,做最大流就好了~View Code 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 7 阅读全文
posted @ 2013-01-07 00:38 proverbs 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个无向图,求最少去掉多少个点后使得原图不连通(即存在两点不连通)。题解:暴力枚举起点终点,做最小割~取最小的即可特判一些极端情况,比如m=0等等~连通度总结(复习用~,转自 : http://blog.csdn.net/zhuyingqingfen/article/details/6386268):图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通 (不存在从s到t的路径),求至少要删去几个元素。 图的连通度分为点连通度和边连通度: (1)点连通度:只许删点,求至少要删掉几个点(当然,s和t不能删去,这里保证原图中至少有三个点); (2)边连通度:只 阅读全文
posted @ 2013-01-07 00:21 proverbs 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 题意:n个人的两两关系矩阵,如果a认识b,则b认识a,且认识有传递性。给出一个s和一个t,问想让s不认识t,最少需要去掉多少人。如果有解,输出字典序最小的解。题解:请特别注意0与NO ANSWER!的区别!具体做法是:拆点限流,先求一次最小割为ans,然后从小到大枚举删除的点,重新建图再做最小割,如果当前结果比ans小,则更新ans,并把这个节点打上vis标记。ps:已经打上vis标记的点不再参与之后重建图时View Code 1 #include <cstring> 2 #include <cstdio> 3 #include <cstdlib> 4 #i 阅读全文
posted @ 2013-01-06 22:14 proverbs 阅读(183) 评论(0) 推荐(0) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 25 下一页