题面

题意:有2个人,都去坐地铁,但是他们相差了X分钟,但是他们也一直在通讯,于是你就知道,你在AB站点中间的时候,他在CD中间,(B一定等于A+1或者A,同理D也是),问你每2个站之间需要的时间的一种方案使得满足上面那些话,满足不了输出IMPOSSIBLE.(站台从1到N,N<=2000)

题解:典型的差分约束 我们回忆一下,对于不等式a-b<=x  我们build(a,b,x);

那么对于本题

if (a==b && c==d) { build(d,a,-x); build(b,c,x); }

if (a==b && c!=d) { build(d,a,-x-1); build(b,c,x-1); }

   if (a!=b) { build(d,a,-x-1); build(b,c,x-1); }

由于要保证图的连通性,记得加一个超级源点,向每个点加1条边

而且是车站,实际问题,每相邻2个站之间,至少需要1分钟.

顺便用了dfs版的spfa板子,跑得飞快

 #include<bits/stdc++.h>
#define N 2005
#define M 10005
const long long inf=0x3f3f3f3f3f3f3f3f;
typedef long long lld;
using namespace std;
struct rec
{
int go,next;
long long v;
}eg[M];
int head[N],que[N],nn,k,a,b,c,p,n,du[N];
lld dis[N];
bool used[N];
void read(int &a)
{
a=;
char c=getchar();
while (c<=) c=getchar();
while (c>) a=a*+c-'',c=getchar();
}
void build(int a,int b,long long c)
{
p++;
eg[p].go=b;
eg[p].next=head[a];
eg[p].v=c;
head[a]=p;
}
stack<int>S;
int spfa()
{
for (int i=;i<=n;i++)
{
S.push(i);
du[i]=;
used[i]=;
dis[i]=;
}
while (!S.empty())
{
int v=S.top();
S.pop();
used[v]=;
for (int u=head[v];u;u=eg[u].next )
if (dis[eg[u].go]>dis[v]+eg[u].v)
{
dis[eg[u].go]=dis[v]+eg[u].v;
if ((++du[eg[u].go])>nn)
{
printf("IMPOSSIBLE");
return ;
}
if (!used[eg[u].go]) S.push(eg[u].go ) ;
}
}
return ;
}
int T,x,d,tt;
int main()
{
int tt=;
scanf("%d",&T);
while (T--)
{
p=;
memset(que,,sizeof(que));
memset(used,,sizeof(used));
memset(du,,sizeof(du));
memset(head,,sizeof(head));
while (!S.empty()) S.pop();
read(nn);read(k);read(x);
for (int i=;i<=k;i++)
{
read(a);read(b);read(c);read(d);
if (a==b && c==d)
{
build(d,a,-x);
build(b,c,x);
}else
if (a==b && c!=d)
{
build(d,a,-x-);
build(b,c,x-);
}else
{
build(d,a,-x-);
build(b,c,x-);
}
}
n=nn+;
for (int i=;i<=nn;i++) build(n,i,);
for (int i=;i<nn;i++) build(i+,i,-);
tt++;
printf("Case #%d: ",tt);
int why=spfa();
if (why) for (int i=;i<=nn;i++) printf("%lld ",dis[i]-dis[i-]);
printf("\n");
}
return ;
}

Hdu-6252 2017CCPC-Final J.Subway Chasing 差分约束的更多相关文章

  1. hdu 4598 Difference(奇圈判定+差分约束)

    这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的... 题意要求(1) |ai| < T for all i   (2) (vi, vj) in E <=& ...

  2. hdu 1531(差分约束)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...

  3. I - 动物狂想曲 HDU - 6252(差分约束)

    I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...

  4. POJ 1364 / HDU 3666 【差分约束-SPFA】

    POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c      —      sum[a]<=sum[a+b+1]−c−1  ...

  5. hdu 4598 差分约束

    思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...

  6. HDU 3666 THE MATRIX PROBLEM (差分约束)

    题意:给定一个最大400*400的矩阵,每次操作可以将某一行或某一列乘上一个数,问能否通过这样的操作使得矩阵内的每个数都在[L,R]的区间内. 析:再把题意说明白一点就是是否存在ai,bj,使得l&l ...

  7. 差分约束 HDU - 1384 HDU - 3592 HDU - 1531 HDU - 3666

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. hdu 3666(差分约束,手动栈解决超时问题)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

随机推荐

  1. ThreadPoolExecutor理解

    ThreadPoolExecutor组成 ThreadPoolExecutor的核心构造函数: public ThreadPoolExecutor(int corePoolSize, int maxi ...

  2. [CefSharp] 如何在JavaScript中调用C#代码

    本例在WinForms下实现,具体流程与WPF一致. 本例仅供调用示例,不代表正常业务书写流程. 1. 创建WinForms项目,并将项目属性设置为x86平台 此处预先设置,避免引用时报错,再花更多的 ...

  3. (转)基于openlayers实现聚类统计展示

    http://blog.csdn.net/gisshixisheng/article/details/46137015 概述: 在前面的博文中讲述过基于Arcgis for js如何实现聚类统计展示, ...

  4. C++调用Matlab函数求特征值

    最近需要用到C++和Matlab的混编,记录一下学习过程~ 要实现的是调用Matlab函数,求矩阵前k个最小的特征值及其特征向量. //C++ #include "engine.h" ...

  5. PAT_A1034#Head of a Gang

    Source: PAT A1034 Head of a Gang (30 分) Description: One way that the police finds the head of a gan ...

  6. [置顶] 来自 Google 的高可用架构理念与实践

    转自:   https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=402738153&idx=1&sn=af5e76aad ...

  7. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  8. 39.exact value and full text

    主要知识点 1.exact value 2.full text     在es中有两种搜索方式,exact value(精确匹配),full text(全文检索) 一.exact value 比如有一 ...

  9. 32.es读请示内部分发原理

    当客户端发送一次读请求时,大致会经过以下几个步骤 1.客户端发送一个请求过去,es的一个node接收到这个请求(随机的node),这个node就被es内部分配成coordinating node(协调 ...

  10. Problem 17

    Problem 17 If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there a ...