摘要: 题目链接:http://poj.org/problem?id=3436 题目噼里啪啦说了一大堆= =,其实很简单。对每个点拆点u-v,然后加限制容量,如果两个点之间可行,那么加边,容量INF,最后加源点s和汇点t,建立有向图后,求大流。只是这个题目的建图有点麻烦,果断用3进制优化后,内存减少了很多,处理上也方便了很多。 1 //STATUS:C++_AC_0MS_180KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #inc 阅读全文
posted @ 2012-12-27 00:38 zhsl 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3020 大意就是,给你一张图,图中某些地方标记为‘*’,要你用1*2的圈覆盖所有的‘*',圈之间可以重叠,要求使得圈的数目最少。 开始我想的是状态压缩DP,后来发现复杂度有点高,以为会TLE。看了Discuss才知道正解是用最大独立集做,即在图上构造一张二分图,然后相邻的’*‘建立边关系,求最大独立集就可以了。至于算法的正确性,我们把独立的点和与之相邻的未盖点看做一个圈就可以了,如果少了一个独立的点,那么’*‘就会覆盖不完全,所以最大独立集就是最少的圈数。 1 //STATUS:G++_AC_0MS_908KB 2 #in 阅读全文
posted @ 2012-12-27 00:29 zhsl 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1860 题目大意就是判断一个有向图中的是否存在正权环。利用Bellman-ford判断负环的思想,改为求最长路,如果在n-1次后再来一次bellman,如果还能更新,那么就是存在正权环。SPFA: 1 //STATUS:G++_AC_0MS_728KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #includ 阅读全文
posted @ 2012-12-27 00:17 zhsl 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1573 随便模拟,水水~ 1 //STATUS:G++_AC_0MS_696KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #include<que 阅读全文
posted @ 2012-12-27 00:09 zhsl 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3928 题目大意是:有n个人按顺序住在一条街上,给定每个人的乒乓球的技术水平值。现在他们要切磋球技,两两切磋,需要找一名裁判,这名裁判的球技水平必须在他们之间,而且他必须居住在他们之间。问一共有多少种情况。 如果直接枚举任意两个数,复杂度O(n^2),此题数据达到20000,铁定TLE。我们可以反过来枚举裁判,那么只要O(n)。接下来就是在[0,i-1]比num[i]小的数的个数,这里是关键,直接遍历的话也会TLE。这里并没有要求动态访问,只要求出结果即可,因此可以离线操作,用线段树优化。具体做法就是,从0开始遍历数列,依... 阅读全文
posted @ 2012-12-27 00:05 zhsl 阅读(340) 评论(0) 推荐(0) 编辑