题意:给出一个序列Si = {aSi, aSi+1, ..., aSi+ni} 和其子序列S = {a1, a2, ..., an};在给出序列的约束条件: aSi + aSi+1 + ... + aSi+ni < ki 或者 aSi + aSi+1 + ... + aSi+ni > ki 。现在给出m行,每一行包含四个数:分别是si, ni, oi, ki,这四个数分别代表序列中第si个数到第si+ni个数大于(gt)或者小于(lt).
思路:差分约束+Bellman_ford:当问题可以转化为形如一组 xi‑x’i<=yi 或一组 xi‑x’i>=yi ,求任一满足的可行解的问题时,可以将其转化为最短路/最长路问题。这道题就是要判断负环,存在负环,则不满足条件。
约束条件:

x[si+ni]-x[si-1]>ki
x[si+ni]-x[si-1]<ki

转化一下:

x[si+ni]-x[si-1]>=ki+1
x[si+ni]-x[si-1]<=ki-1

继续转化:

x[si-1]-x[si+ni]<=-ki-1
x[si+ni]-x[si-1]<=ki-1

注意:不等式转变成"<=“的形 式,建图后求最短路;相反,如果需要求的是两个变量差的最小值,那么需要将所有不等式转化成”>=",建图后求最长路。

这里随便说一下关于Bellman_ford算法:
1.初始化时将起点 s 到各个顶点 v 的距离 dist(s->v) 赋值为 ∞,dist(s->s) 赋值为 0; 2.若存在:dist(a) +weight(ab) < dist(b)则说明存在到 b 的更短的路径,s->…->a->b, 更新 b 点的总花费为(dist(a) +weight(ab)),⽗节点为 a。3.遍历都结束后,若再进⾏⼀次遍历,还能得到 s 到某些节点更短的路径的话(dist(a) +weight(ab) < dist(b),则图中存在负环路,即是说该图无法求出单源最短路径。否则数组dist[n]中记录的就是源点s到各顶点的最短路径长度),则说明存在负环路。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<cstdio>
using namespace std;
const int maxx=60005;
const int inf=0x3f3f3f3f;
int dist[maxx];
int vis[maxx];
char s[5];
int num[maxx];
vector<int>G[maxx];
int n,m;
int head[maxx];
struct node{int u,v;int next;int w;
}e[maxx<<2];
int cnt;
queue<int>q;
void init(){cnt=0;memset(num,0,sizeof(num));memset(vis,0,sizeof(vis));memset(head,-1,sizeof(head));while(!q.empty())q.pop();
}
void add(int u,int v,int w){e[cnt].u=u;e[cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt++;
}
bool Bellman_ford(int s,int t){for(int i=0;i<=t;i++){dist[i]=inf;}dist[s]=0;int flag;for(int i=1;i<=n;i++){flag=1;for(int j=0;j<cnt;j++){if(dist[e[j].v]>dist[e[j].u]+e[j].w){dist[e[j].v]=dist[e[j].u]+e[j].w;flag=0;}}if(flag==1)break;}for(int j=0;j<cnt;j++){if(dist[e[j].v]>dist[e[j].u]+e[j].w){dist[e[j].v]=dist[e[j].u]+e[j].w;return false;}}return true;
}
int main(){while(scanf("%d",&n)!=EOF){if(n==0)break;init();scanf("%d",&m);for(int i=1;i<=m;i++){int a,b;int cost;scanf("%d %d %s %d",&a,&b,&s,&cost);if(s[0]=='g'){add(a+b,a-1,-cost-1);}else{add(a-1,a+b,cost-1);}}bool ans=Bellman_ford(1,n);if(ans==true){cout<<"lamentable kingdom"<<endl;}else{cout<<"successful conspiracy"<<endl;}}return 0;
}

HDU1531(差分约束+Bellman_ford)相关推荐

  1. poj1364(差分约束+Bellman-ford)

    题意:给出一个序列Si = {aSi, aSi+1, ..., aSi+ni} 和其子序列S = {a1, a2, ..., an}:在给出序列的约束条件: aSi + aSi+1 + ... + a ...

  2. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534

    一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一:  感觉难点在于建图  第二:  ①:对于差分不等式,a - b <= ...

  3. [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]

    题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...

  4. zoj 2770 Burn the Linked Camp(火烧连营) 差分约束

    今天学了一个东西叫差分约束,简单来说就是用最短路知识的三角不等式来解多元不等式组.假设 Xv - Xu <= e 可利用最短路的三角不等式将这个不等式转化为图中的一条边,这条单向边是以u为起点, ...

  5. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  6. HDU3440(差分约束+SPFA算法)

    题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...

  7. poj3159(差分约束)

    题意:其实题目要求的就是这个B-A<=c,所以对应单源最短路径中的d[v]>d[u]+e[u][v] 关于差分约束: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...

  8. poj1201(差分约束+SPFA)

    看到这道题,其实就是和poj1716是差不多的 题意:给出n个闭整数区间[ai,bi]和n个整数C1,.,cn.计算具有区间[ai,bi]的至少ci公共元素的整数集Z的最小大小,对于每一个i=1,2, ...

  9. poj3169(差分约束+SPFA)

    题意:FJ有N头牛,这些牛都站在一条直线上等待,但是现在给出了一些条件: 1.首先列出哪些牛之间彼此喜欢,以及之间的最大距离,也就是A-B<=X 2.随后列出哪些牛之间彼此不喜欢,以及之间的最小 ...

最新文章

  1. 悉尼大学计算机研究生学制,悉尼大学研究生学制
  2. identifier of an instance of was altered from to n
  3. Java 开源库精选(持续更新)
  4. [JavaWeb-MySQL]MySQL登陆和退出
  5. 微信支付PKIX path building failed
  6. 使用Intellij Idea自定义MVC框架
  7. My SQL随记 001 常用名词/结构化语言
  8. 【Scratch案例教学】scratch旋转风车 ​​​​scratch编程案例教学 scratch创意编程 少儿编程教案
  9. STM8L101和STM8S103差异对比
  10. 计算机协会换届答辩ppt,国奖答辩PPT-精选版.ppt
  11. fifo的rdata_异步FIFO设计与实现
  12. Windows 10为强化资安防御 这些IT人最关心的事
  13. 华为面试题: 杨辉三角形的变形
  14. Fiddler+雷电模拟器进行APP抓包
  15. 1008: 美元和人民币 ZZULIOJ
  16. PIO模式和DMA模式的区别
  17. word如何修改行间距和段落间距
  18. Mobile Net 系列【V1—V3】
  19. 推荐一款专业制作手机铃声的音乐剪辑器?
  20. css后台页面布局效果

热门文章

  1. 异步爬虫框架与协程浅析
  2. Numpy的介绍和优势
  3. python之⾯向对象-继承
  4. 【小白学PyTorch】10.pytorch常见运算详解
  5. 基于锚框与无需锚框的通用物体检测算法
  6. 机器学习小抄,轻松搞定理解机器学习!
  7. 对抗图像和攻击在Keras和TensorFlow上的实现
  8. 栈与队列8——求最大子矩阵的大小
  9. Python中的常规习题
  10. 3-unit10 iptables