Hdu-6252 2017CCPC-Final J.Subway Chasing 差分约束
题意:有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 差分约束的更多相关文章
- hdu 4598 Difference(奇圈判定+差分约束)
这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的... 题意要求(1) |ai| < T for all i (2) (vi, vj) in E <=& ...
- hdu 1531(差分约束)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...
- I - 动物狂想曲 HDU - 6252(差分约束)
I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...
- 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 ...
- hdu 4598 差分约束
思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...
- HDU 3666 THE MATRIX PROBLEM (差分约束)
题意:给定一个最大400*400的矩阵,每次操作可以将某一行或某一列乘上一个数,问能否通过这样的操作使得矩阵内的每个数都在[L,R]的区间内. 析:再把题意说明白一点就是是否存在ai,bj,使得l&l ...
- 差分约束 HDU - 1384 HDU - 3592 HDU - 1531 HDU - 3666
Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 3666(差分约束,手动栈解决超时问题)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
随机推荐
- android 国际化 横屏(land) 竖屏(port)margin外边距和padding内边距
android 国际化 横屏(land) 竖屏(port) 边距又分为内边距和外边距,即margin和padding.
- oracle 提示登录密码过期解决
1.登录到oracle的 服务器 2.切换到oracle 用户 3.设置到当前操作的实例名:export ORACLE_SID=XXX 4.连接数据库的命令行模式:sqlplus /nolog 5.s ...
- 终极解决VS2015 安装失败问题,如 安装包损坏或丢失
1.去微软官网下载完成ISO镜像,最好不要在线安装, 打开官方链接 https://www.visualstudio.com/zh-cn/downloads/download-visual-studi ...
- Matlab数组创建
只用C语言,不用Matlab这种魔咒还是要打破的.Matlab是科学计算的常用工具,既然以前没用过,现在开始学吧...... 1. 向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] ...
- (转)OL记载Arcgis Server切片
http://blog.csdn.net/gisshixisheng/article/details/47955787 概述: 本文讲述如何在OpenLayers中调用Arcgis Server切片并 ...
- swift-正则验证手机号码
// 手机号验证正则表达式 func validateMobile(phoneNum:String)-> Bool { // 手机号以 13 14 15 18 开头 八个 \d 数字字符 let ...
- 表操作(day03)
回顾: 1.单行函数 2.表连接 oracle中的表连接 内连接 等值连接 select e.id,e.first_name,d.name from s_emp e,s_dept d where e. ...
- 重装系统后导入raid
参考 https://ubuntuforums.org/showthread.php?t=2002217 https://www.funkypenguin.co.nz/note/importing-e ...
- PHP多进程初探 --- 利用多进程开发点儿东西吧
[原文地址:https://blog.ti-node.com/blog...] 干巴巴地叨逼叨了这么久,时候表演真正的技术了! 做个高端点儿的玩意吧,加入我们要做一个任务系统,这个系统可以在后台帮我们 ...
- react-native页面间传递数据的几种方式
1. 利用react-native 事件DeviceEventEmitter 监听广播 应用场景: - 表单提交页面, A页面跳转到B页面选人, 然后返回A页面, 需要将B页面选择的数据传回A页面. ...