IT民工
加油!

随笔分类 -  图论

POJ 2449 Remmarguts' Date
摘要:K短路dij+Astar。/*Accepted 9904K 282MS C++ 2223B 2012-09-28 15:30:02*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;const int MAXN = 1 << 10;const int MAXM = 100 * MAXN;typed 阅读全文
posted @ 2012-09-28 15:36 找回失去的 阅读(156) 评论(0) 推荐(0)
POJ 3255 Roadblocks
摘要:求次短路径。先求出从1出发的单源最短路,用d[0][i]表示,再求出从N出发的单源最短路,用d[1][i]表示。次短路应该是在d[0][a]+ d[1][b]+w[a][b]中选,先用heap+Dijktra做两遍最短路,然后再求次短路即可。/*Accepted 2792K 110MS C++ 2128B 2012-09-22 10:29:43*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <queue>usi 阅读全文
posted @ 2012-09-22 10:31 找回失去的 阅读(696) 评论(0) 推荐(0)
POJ 2728 Desert King
摘要:最优比例生成树,用prim解生成树的权值之和,然后用迭代法求最优比例,也可以用二分法来求比例。lowc[i]=dh[1][i]-x*dl[1][i],高度差-平面距离*比例。/*Accepted 16292K 188MS C++ 1936B 2012-09-22 10:12:11*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <queue>#include <algorithm>#include <math.h>using namespa 阅读全文
posted @ 2012-09-22 10:26 找回失去的 阅读(216) 评论(0) 推荐(0)
POJ 3613 Cow Relays
摘要:求s到e经过n条边的最短路,看了08年国家集训队.俞华程的论文《矩阵乘法在信息学中的应用》,其中讲到图的邻接矩阵k次方后,a[i][j]可以表示i到j经过n-1个点的一条路径,结合floyd就能求出我们所需要的结果。/*Accepted 2060K 172MS C++ 1608B 2012-09-15 10:38:47*/#include <stdio.h>#include <string.h>#include <stdlib.h>const int MAXN = 1 << 10;const int MAXD = 105;int hash[MAX 阅读全文
posted @ 2012-09-15 10:52 找回失去的 阅读(243) 评论(0) 推荐(0)
POJ 3660 Cow Contest
摘要:题目蛮有意思的,有n头牛进行比赛,他们之间的比赛结果可以传递,比如a战胜了b,b战胜了c,那么也可以推出a战胜了c,问有多少头牛的名次可以确定。名次确定就是它战胜的x头牛+战胜它的y头牛=n-1,出现这种情况+1即可。今天的开胃菜。。。/*Accepted 228K 32MS C++ 1056B 2012-09-03 09:46:55*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 7;int res[MAXN][MAXN];int n, m; 阅读全文
posted @ 2012-09-03 10:03 找回失去的 阅读(187) 评论(0) 推荐(0)
POJ 1325 Machine Schedule
摘要:http://poj.org/problem?id=1325做的第一道二分图匹配的题,应该说代码是很基础的,但是建模确实需要一定的技巧。这也是黑书上的一个例题,将每个任务看成一条边,把A机器的每个模式看成一个X结点,B机器的看成Y结点。任务i为( ai, bj)。这道题求的是最少的点,让每条边都至少与其中一个点关联。这里有一个结论,这个最少点数就是最大匹配数M,黑书的证明如下:(1) M个是足够的。只需要让它们覆盖最大匹配的这M条边,则其他边一定被覆盖 (如果有一条边e不被覆盖,把e加入后得到一个更大的匹配)(2) M个是必需的。仅仅考虑形成最大匹配的这M条边,由于它们两两无公共点, ... 阅读全文
posted @ 2012-08-06 17:02 找回失去的 阅读(265) 评论(0) 推荐(0)
POJ 3159 Candies
摘要:题意是给A和B发糖果,B的糖果数–A的糖果数<=c,也就是B<=A+c,最后求n比1最多多几个糖果。题目只有这一个约束条件,建图不难。将AB看成有向图的边,然后c看成边的权值,转化成最短路来求解,大牛们都说了SPFA+queue会超时,所以用了SPFA+stack。因为这道题没有负权的边,也可以用堆优化的dij来求这个最短路。SPFA + Stack/*Accepted 2396K 532MS C++ 1363B 2012-08-06 15:32:00*/#include<cstdio>#include<cstring>#include<cstdlib 阅读全文
posted @ 2012-08-06 15:34 找回失去的 阅读(256) 评论(0) 推荐(1)
POJ 3169 Layout
摘要:题意是有N头牛,其中有ML对是相互喜欢的,它们之间不能超过一个距离,有MD对是互相不喜欢的,它们的距离不得少于D。在ML中a,b,c分别代表两头牛的编号和最大距离,有a,b中max–min<=c。而在MD中则反过来min-max<=-c.即max<=min+c,min<=max-c.根据这个条件建图,然后求出第一头牛到第n头牛的距离,如果存在,输出这个距离,如果存在负圈,输出-1,不存在答案输出-2./*Accepted 280K 47MS C++ 1803B 2012-08-06 14:53:35*/#include<stdio.h>#include< 阅读全文
posted @ 2012-08-06 14:08 找回失去的 阅读(226) 评论(0) 推荐(0)
POJ 1201 Intervals
摘要:做的第一个差分约束的题。读完题后一脸茫然,不会建图。看了算法导论,其实这是一个建立<=差分约束系统的过程。设s[x]=从0到x的所有在集合中的数的个数,则ai到bi的个数即S[bi]-S[ai-1]。因此有:(1)S[bi]-S[ai-1]>=ci。 又根据s[x]本身的性质,后面的一定不比前面的小,后面的最多比前面多一,有:(2)s[i+1]-s[i]>=0(3)s[i+1]-s[i]<=1根据这三个约束条件建图,使图中每一组边,均满足:S[ai-1]<=S[bi]-ciS[i]<=S[i-1]+1S[i-1]<=S[i]建完图,用Bellman-F 阅读全文
posted @ 2012-08-06 13:08 找回失去的 阅读(299) 评论(0) 推荐(0)