题目链接

题意:现在有两个人,其中一个人比另外一个人先走x分钟,然后两个人在途中不停的聊天,要是两个人报的点一样说明该人正好在那个点,要是不一样,则在两个点中间,现在要让你求两个站之间的长度(只要满足题意就好了)。

题解:这是一道差分约束的题,首先根据两个人给出点的顺序来确定一系列的不等式,再根据不等式建边,最后跑最短路。

本题可以分成三种情况。

情况一: a==b && c==d,可得出关系:c-b=x,d-a=x。

情况二:. a!=b  && c!=d  && b!=c,可得出关系:b-c<x,d-a>x。

情况三: a!=b && b==c &&c==d或者a==b && b==c && c!=d,可得出关系:d-a>x。

因为在两点之间没有包含两点,所以是大于或者小于没有等于。

差分约束,只要出现a-b<=c,可添加边add_edge(b,a,c)

=号可以转换成 >= && <=

<X可以转换成 <=X-1

>X可以转换成 >=X+1

#include <iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<stack>
#include<string>const int mod = 1e9 + 7;
const int maxn = 1e4 + 5;
const int inf = 2e9;
const long long onf = 1e18;
#define me(a, b) memset(a,b,sizeof(a))
#define lowbit(x) x&(-x)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define PI 3.14159265358979323846
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int n, m, x;
int head[maxn], tot;
int dis[maxn];
struct node {int v, next, val;
} maps[maxn << 1];void add_edge(int u, int v, int val) {maps[tot] = node{v, head[u], val};head[u] = tot++;
}void init() {for (int i = 0; i <= n; i++)head[i] = -1;tot = 0;
}bool SPFA(int st) {int cnt[maxn], vis[maxn];for (int i = 1; i <= n; i++)vis[i] = 0, dis[i] = inf, cnt[i] = 0;queue<int> q;vis[st] = 1, cnt[st] = 1, dis[st] = 0;q.push(st);while (!q.empty()) {int u = q.front();q.pop(), vis[u] = 0;for (int i = head[u]; i != -1; i = maps[i].next) {int v = maps[i].v, val = maps[i].val;if (dis[v] > dis[u] + val) {dis[v] = dis[u] + val;if (!vis[v]) {vis[v] = 1, cnt[v]++;q.push(v);if (cnt[v] >= n)///判断是否有负环return false;}}}}return true;
}void work() {scanf("%d%d%d", &n, &m, &x);init();for (int i = 1; i <= m; i++) {int a, b, c, d;scanf("%d%d%d%d", &a, &b, &c, &d);if (a == b && c == d) {add_edge(d, a, -x);add_edge(b, c, x);} else if ((b == c && c == d) || (a == b && b == c)) {add_edge(d, a, -x - 1);} else {add_edge(b, c, x - 1);add_edge(d, a, -x - 1);}}for (int i = 1; i <= n; i++) {if (i > 1)add_edge(i, i - 1, -1);add_edge(0, i, 0);}if (!SPFA(0))puts("IMPOSSIBLE");else {for (int i = 2; i <= n; i++)printf("%d ", dis[i] - dis[i - 1]);printf("\n");}
}int main() {
#ifndef ONLINE_JUDGE//freopen("1.in", "r", stdin);
#endifint t = 1, Case = 1;cin >> t;while (t--) {printf("Case #%d: ", Case++);work();}return 0;
}

HDU - 6252 Subway Chasing (差分约束)相关推荐

  1. 2017 CCPC final HDU - 6252 Subway Chasing (差分约束)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6252 题目大意:有n个车站,两个人轮流从第一个车站出发,第一个人先出发x分钟,第二个人再出发.接下来给 ...

  2. 17 哈尔滨CCPC final J - Subway Chasing 差分约束

    题目:https://vjudge.net/problem/HDU-6252 Mr. Panda and God Sheep are roommates and working in the same ...

  3. HDU 1384 Intervals【差分约束-SPFA】

    类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...

  4. J - Subway Chasing ( 差分约束 )

    J - Subway Chasing ( 差分约束 ) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6252 题意:有1~n号地铁站( Alice和B ...

  5. hdu6525——Subway Chasing(差分约束系统)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6252 题目大意: 第一个人比第二个人先走了x分钟,路上有n个车站,现在有m个询问,每次询问会得到第一个 ...

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

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

  7. hdu 1534(差分约束)

    题意: 安排计划,有4种约束方式,给出你这些时间的n个约束.. 如果计划是可行的,求出每一件事发生的最早时间..否则输出"impossible".. ①. FAF a b a要在b ...

  8. 【HDU - 3440】House Man(差分约束)

    题干: In Fuzhou, there is a crazy super man. He can't fly, but he could jump from housetop to housetop ...

  9. HDU 3440 House Man (差分约束)

    题意:有N个在一条直线上的房子, 每个房子有着不同的高度,超人可以将这些房子左右移动,但不能改变房子之间的相对位置.超人要从最矮的房子跳到刚好比他高的房子上面, 且每次跳的房子都要比当前房子要高,他要 ...

最新文章

  1. python输出csv文件中文乱码-python读写csv时中文乱码问题解决办法
  2. Matlab 常用运算符的用法和功能
  3. 通过java使用ssh访问远程Linux
  4. 阿里云数据库MYSQL和自建数据库的对比(附新手领取免费的一个月云服务器)
  5. t580 thinkpad_聊聊ThinkPad T580:除了大屏,还有什么
  6. 信息学奥赛一本通C++语言——1011: 甲流疫情死亡率
  7. 【clickhouse】clickhouse There is no DistributedDDL configuration in server config
  8. nyoj_49_开心的小明_201403161133
  9. java推箱子游戏源代码_java实现推箱子小游戏(附源码)
  10. [转载]JXTA概念介绍
  11. ESD二极管,SOT-23封装型号大全
  12. XUI -Android原生UI框架的配置
  13. 6-2 有序顺序表的插入
  14. oracle里update+where,Oracle 关联表更新 update ,where exists
  15. 中止执行后超过2年_执行中止后恢复执行的期限有什么规定
  16. PYTHON实现将一个文件夹下的名字满足条件的图片拷贝复制到另一个文件夹路径
  17. 中国食物链?(看不上,看不起,瞧不起,狗眼看人低)
  18. 【solarwinds】【Orion】综述
  19. Unable to negotiate with x.x.x.x port 22: no matching key exchange method found. Their offer: diffie
  20. 用计算机求a的绝对值,计算机概论A卷

热门文章

  1. 计算机的英语对话,英语口语对话练习:电脑绝对不只是机器
  2. 工作站Linux双显卡BIOS设置,在BIOS Setup里面设置双显卡机型的双显卡模式
  3. Java中判断字符串是否相等
  4. Linux系统CentOS镜像文件下载地址(如:CentOS-6.5-x86_64-bin-DVD1.iso)
  5. 百度翻译API接口测试
  6. 【Python】pickle写入加载数据
  7. Windows远程桌面相关
  8. Nisi实现安装包制作
  9. Put the Mouse Down and Step Away from the Keyboard
  10. java二进制数组_Java中的二进制及基本的位运算