随笔分类 -  图论——差分约束

摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3666题意:给你一个N*M的矩阵,求两列数a1,a2,a3...an 和 b1,b2.....bm使得对矩阵中的每个数进行下面的操作之后的值在[L,U]之间,操作为:a[i] * m[i][j] / b[j]。 N,M<=400题解: 差分约束。 首先 L<= c[i][j] *ai / bj <= u ,以前 我们遇到的都是 减法的 差分约束 ,那么我们 只i要 取 log 就可以 了,两边 他同除以 c[i][j] , 然后取 log 锝 ,log(l) - log(c[i][j]) & 阅读全文
posted @ 2012-10-17 17:18 Szz 阅读(313) 评论(0) 推荐(0) 编辑
摘要:1 http://poj.org/problem?id=1364/* 2 题意: 3 告诉你有一列长度为n的数列和m个关系式。每个关系式的表述为: 4 si ni “gt” c 或者是 si ni “lt” c。分别代表该数列第si项一直加到第si+ni项的和大于c, 5 和第si项一直加到第si+ni项的和小于c。求是否存在满足以上m个要求的数列。是则输出“lamentable kingdom”, 6 否则输出“successful conspiracy”。 7 8 tmd 犯糊涂了 用dis[i]表示 前i 项和 题中 s... 阅读全文
posted @ 2012-04-30 10:37 Szz 阅读(187) 评论(0) 推荐(0) 编辑
摘要:1 /* 2 又是一道差分约束题,通过这道题让我更加理解了差分约束。 3 差分约束的关键是 要充分利用所给条件 4 建立数组的 逻辑意义 如此题的dis[]数组(s[]数组) 建立差分约束系统即(找出差分约束关系), 5 6 7 注:看了2006冯威的论文。整理如下: 设num[i]为i时刻能够开始工作的人数,x[i]为实际雇佣的人数, 设r[i]为i时刻至少需要工作的人数, s[I]=x[1]+x[2]…+x[I] 有如下关系: x[I]<=num[I] x[I-7]+x[I-6]+x[I-5]+x[I-4]+x[I-3]+x[I-2]+x[I-1... 阅读全文
posted @ 2012-04-29 11:30 Szz 阅读(731) 评论(0) 推荐(0) 编辑
摘要:1 http://poj.org/problem?id=3159 有一批糖果要由班长flymouse分发给班里的小朋友,给出m对数据u,v,w,表示第v个小朋友最多比第u个小朋友多w个,但flymouse与snoopy不和,所以在满足上述约束的条件下,flymouse要尽量比snoopy多。snoopy标号1,flymouse标号n/* 2 终于 把这道题过了 ,wa了n次,spfa+队列 会 超时,tmd,改了 spfa+stack 3 spfa差分约束,dis[i]为第i人得到的糖果数目。对于每个约束管理就能列出不等式: 4 dis[a]>=dis[b]-c,就能转化为dis[b]. 阅读全文
posted @ 2012-04-26 16:54 Szz 阅读(144) 评论(0) 推荐(0) 编辑
摘要:1 http://poj.org/problem?id=2983 2 判断是否存在负权回路,差分约束条件 有 3 A 到B的距离一定是 X 4 所以要 表示出来就是 insert(A,B,-x); 5 insert(B,A,x); 6 #include<stdio.h> 7 #include<vector> 8 #include<iostream> 9 #include<queue> 10 #include<string.h> 11 using namespace std; 12 const int N=2000; 13 int n; 阅读全文
posted @ 2012-04-25 21:16 Szz 阅读(175) 评论(0) 推荐(0) 编辑
摘要:1 /* 2 http://poj.org/problem?id=1201 3 题目的转换真的非常非常巧妙,让我再来梳理一下。本题的题意是给了我们一些区间,然后告诉每个区间中至少需要取Ci个数。 4 求出满足n个条件的集合C的最少的元素个数。 5 用dis[i+1]表示从最小值min 到i所选得最小数 6 则有 dis[i]-dis[j]<=-W(i,j); 7 此外还必须加上 8 1>=dis[i+1]-dis[i]>=0; 9 这样就构成了完整的差分约束系统10 */11 #include<stdio.h>12 #include<vector>13 阅读全文
posted @ 2012-04-25 17:08 Szz 阅读(177) 评论(0) 推荐(0) 编辑
摘要:1 差分约束系统 2 加一个源点s指向所有点边权为0, 3 加一个汇点t,所有点指向t边权为0, 4 u和v安全距离为w,则加边v->u,边权为-w 5 (因为 u-v>=w 所以v-u<=-w ) 6 求s到t最短路即可。 7 http://acm.hdu.edu.cn/showproblem.php?pid=4109 8 #include<stdio.h> 9 const int N=10000;10 #define max 99999911 int dis[N],num,n;12 struct node13 {14 int b;15 int e;16 int 阅读全文
posted @ 2012-04-24 17:36 Szz 阅读(281) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示