poj1364(差分约束系统)

poj1364

设s[i] 表示a1 + a2 + ... + a(i-1)的和

给我们n个点,m条约束

如果是a b gt c    那么表示 s[a+b+1] - s[a] > c      --->  s[a] -s[a+b+1] <-c <=-c-1      --> s[a] <= s[a+b+1] + (-c-1)

如果是a b lt c     那么表示 s[a+b+1] - s[a] < c      --->  s[a+b+1] - s[a] <= c - 1     -->  s[a+b+1] <= s[a] + (c-1)

题目要问我们是不是所有变量都满足约束条件,如果满足输出lamentable kingdom, 如果不满足,输出successful conspiracy

满不满足约束条件, 即图存不存在负权回路。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 #include <map>
10 #include <set>
11 #include <string>
12 #include <math.h>
13 using namespace std;
14 #pragma warning(disable:4996)
15 typedef long long LL;
16 const int INF = 1<<30;
17 /*
18 s[a+b+1] - s[a] >c   -->   s[a] - s[a+b+1] < -c <= -c-1
19 s[a+b+1] - s[a] <c   -->   s[a+b+1] -s[a] < c <= c-1
20 不连通要我们求环
21 */
22 struct Edge
23 {
24     int from,to,dist;
25 }es[100+10];
26 int dist[100+10];
27 bool bellman_ford(int n, int m)
28 {
29     //因为是求存不存在负权回路,那么只要初始化为0,更新n遍之后,如果还能再更新,那么就存在
30     for(int i=1; i<=n; ++i)
31         dist[i] = 0;
32     for(int i=1; i<=n; ++i)//n+1个点,所以要更新n遍
33     {
34         for(int j=0; j<m; ++j)
35         {
36             Edge &e = es[j];
37             //因为图是不连通的,所以如果置为INF的时候,不能在这里加这个条件
38             if(/*dist[e.from]!=INF &&*/ dist[e.to] > dist[e.from] + e.dist)
39                 dist[e.to] = dist[e.from] + e.dist;
40         }
41     }
42     for(int j=0; j<m; ++j)
43     {
44         Edge &e = es[j];
45         if(dist[e.to] > dist[e.from] + e.dist)
46                 return false;
47     }
48     return true;
49 }
50 int main()
51 {
52
53     int n,m,a,b,c,i;
54     char str[3];
55     while(scanf("%d",&n),n)
56     {
57         scanf("%d",&m);
58         for(i=0; i<m; ++i)
59         {
60             scanf("%d%d%s%d",&a,&b,str,&c);
61             if(str[0]==‘g‘)
62             {
63                 es[i].from = a + b + 1;
64                 es[i].to = a;
65                 es[i].dist = -c - 1;
66             }
67             else
68             {
69                 es[i].from = a;
70                 es[i].to = a + b +1;
71                 es[i].dist = c-1;
72             }
73         }
74         bool ret = bellman_ford(n,m);
75         if(ret)
76             puts("lamentable kingdom");
77         else
78             puts("successful conspiracy");
79     }
80     return 0;
81 }
时间: 2024-07-30 15:16:32

poj1364(差分约束系统)的相关文章

转自 void- man 差分约束系统详解

一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y<=b不等式的约束,问你是否满足有解的问题 好神奇的是这类问题竟然可以转换成图论里的最短路径问题,下面开始详细介绍下 比如给出三个不等式,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值,我们可以把a,b,c转换成三个点,k1,k2,k3是边上的权,如图 由题我们可以得知,这个有向图中,由题b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比较

差分约束系统(转)

1.问题定义 差分约束系统属于线性规划问题.在一个差分约束系统中,线性规划矩阵A的每一行包含一个1和一个-1,A的所有其他元素都为0.因此,由Ax≤b给出的约束条件是m个差分约束集合,其中包含n个未知元.每个约束条件为如下形式的简单线性不等式:xj-xi≤bk(1≤i, j≤n,1≤k≤m).如下图5维向量x满足8个不等式的差分约束,我们可以把未知量x1,x2,x3,x4,x5化为如下8个不等式: 我们可以发现当x=(x1,x2,…,xn)是差分约束系统Ax≤b的一个解,d为任意常数.则x+d=

差分约束系统

差分约束系统是指一系列不等式: $$ X_j - X_i \le C_{ij}(1\le i, j \le n) $$ 当然 i,j 不必取遍 1-n,而且在扩展的状况下,对于每个(i,j),可以由多个 $C_{ij}$,但是我们很容易把它们化成一个不等式. 在求解不等式组之前,我们可以分析一下这个不等式组的性质. 1. 这个不等式组是可以无解的,比如: $$X_1 - X_2 \le -1 \\ X_2 - X_3 \le -1 \\ X_3 - X_1 \le -1$$ 否则三个不等式相加得

UVa 515 - King (差分约束系统 + SPFA求带负权最短路)

下面是差分约束系统的详细介绍,以及解决方法~ 摘抄自 xuezhongfenfei(他好像也是转的....) 差分约束系统 X1 - X2 <= 0 X1 - X5 <= -1 X2 - X5 <= 1 X3 - X1 <= 5 X4 - X1 <= 4 X4 - X3 <= -1 X5 - X3 <= -3 X5 - X4 <= -3 不等式组(1) 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于).这样的不等式组

差分约束系统 初见

今天初次学习差分约束系统,很神奇的东西 定义: 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints).亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法. 求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题. 其实在一些问题中需求最小值或最大值,同时需要满足一系列的不等式关系,这样就可以用到差分约束系统了,对于求最小值的问

ZOJ 3668 Launching the Spacecraft (差分约束系统,最短路)

题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668 题意: 给一个初始值为0的长度为n的区间,给m个约束l,r,a,b,表示从l到r的区间和>=a且<=b,且每个数的范围为-10000~10000,问这个区间的每个数是多少,要求数尽可能大,且序列字典序最大. 方法: 差分约束系统,以前缀和表示一个节点a[i] 建图:根据下面约束条件建图 a[i]-a[i-1]<=10000 a[i-1]-a[i]&l

POJ 2983 Is the Information Reliable?(差分约束系统)

题目地址:POJ 2983 这题刚上来完全不知道跟差分约束系统有什么关系.....后来发现只要判个负环就可以.. 因为假如有冲突的话会形成一个负环.之所以建图加上一个正值一个负值,是因为这样的话,像1 2 4和1 2 3这样的数据就会形成一个负环.这个方法还是很巧妙的...然后对于V的那些不清楚的位置,就会跟P的那些等式联立形成一个不等式,然后在用最短路判环的过程中就用松弛来解决. 代码如下: #include <iostream> #include <cstdio> #inclu

【POJ 1201】 Intervals(差分约束系统)

[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23817   Accepted: 9023 Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p

差分约束系统--详讲

------------差分约束题目请戳:差分约束题集暨报告 总的开说差分约束问题就是给出一系列不等式然后求问某一式子的最大值或者最小值. 差分约束问题具体解释: 比方有这样一组不等式: X1 - X2 <= 0 X1 - X5 <= -1 X2 - X5 <= 1 X3 - X1 <= 5                   不等式组(1) X4 - X1 <= 4 X4 - X3 <= -1 X5 - X3 <= -3 X5 - X4 <= -3 全都是

浅谈差分约束系统——图论不等式的变形

浅谈差分约束系统——图论不等式的变形 ----yangyaojia 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! 一.定义 如若一个系统由n个变量和m个不等式组成,并且这m个不等式对应的系数矩阵中每一行有且仅有一个1和-1,其它的都为0,这样的系统称为差分约束( difference constraints )系统. 二.分析 简单来说就是给你n个变量,给m个形如x[i]-x[j]≥k①或x[i]-x[j]≤k②.求两