摘要: 看到这个标题后我毅然交上了CTSC的树形DP,WA的结果不言而喻,囧仔细读题后有两种思路:1.把每个课程拆成两个点,对于时间发生矛盾的课之间(i‘-->j)(i-->j')下面应该是一个最大独立集问题了,点数减匹配数即可这个思路没有实践,如果有错,请指出。2.很多人都用这种方法,二分图一边是84个时间点,另一边是课程,连边之后求最大匹配即可View Code 1 program pku2239(input,output); 2 var 3 f : array[0..100,0..301] of boolean; 4 lk : array[0..301] of longint 阅读全文
posted @ 2012-03-01 11:53 Codinginging 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 这道题目就没有1274那么阴人,学生一边,课程一边,构造二分图,看最大匹配是否等于m就可以了View Code 1 program pku1469(input,output); 2 var 3 f : array[0..101,0..301] of boolean; 4 lk : array[0..301] of longint; 5 v : array[0..301] of boolean; 6 n,m,p,k : longint; 7 procedure init; 8 var 9 i,j,x,y : longint;10... 阅读全文
posted @ 2012-03-01 11:46 Codinginging 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 有n头牛,m个牛栏,其中每头牛都有自己愿意去的牛栏,求牛和牛栏的最大匹配。简单的二分图裸题,居然调了1节课,数据会阴人啊!!每行第一个数是说这一行接下来有多少个数,可是这些数完了这一行还有数,用read就悲催了!View Code 1 program pku1274(input,output); 2 var 3 f : array[0..301,0..301] of boolean; 4 v : array[0..301] of boolean; 5 lk : array[0..301] of longint; 6 n,m : longint; 7 proc... 阅读全文
posted @ 2012-03-01 11:42 Codinginging 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 在一个网格中有某些垃圾,机器人只能向下或向右,当某个机器人走到垃圾处时,看做它捡起了这个垃圾,现在给定各垃圾坐标求捡起所有垃圾最少需要的机器人数。很明显的最小路径覆盖,但是再向深里挖呢??把坐标按x升序排序,x相同保证y升序,那么某一个机器人捡起的垃圾组成的序列必是x,y的最长不降序列,问题转化为求用最少的不降序列覆盖原序列由偏序集的Dilworth定理,这个答案就是原序列的最长下降序列,n^2算法即可。View Code 1 program pku1548(input,output); 2 var 3 f : array[0..1000] of longint; 4 x,y... 阅读全文
posted @ 2012-02-29 18:01 Codinginging 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 给一个n个点,m条边的图,每条边上有费用,求1到n的路径中最长边最小值,其中可以选择k条边不计费用最大最小问题,看见就二分答案布尔数组 d[i,j]表示在第i点,选择j条边免费,且其余边中最大值小于二分值,的状态是否可以达到用SPFA扩展即可,最后在d[i,0..k]中只要有一个是TRUE,该二分值就成立由我的程序,可以延伸出两种优化算法1.可以把d[i,j]表示到i点用了j条免费边后起点到当前点的最大值,一边SPFA之后,d[n,0..k]中的最小值就是答案。2.二分答案,d[i]记录超过答案的边数,如果最终d[n]<=k,则合法View Code 1 program pku3662( 阅读全文
posted @ 2012-02-28 15:41 Codinginging 阅读(207) 评论(0) 推荐(0) 编辑