51nod1340 地铁环线
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1340
设x为环线的长度,要判断某个特定的x是否可行,不难将题目转为差分约束模型,用最短路求解,每个限制条件对应图中一条边,可行当且仅当图中没有负环。
#include<bits/stdc++.h>
typedef long long i64;
const i64 inf=1ll<<;
int T,n,m1,m2,ep;
i64 l[][];
void mins(i64&a,i64 b){if(a>b)a=b;}
i64 up(i64 A,i64 B){
if(B<)B=-B,A=-A;
i64 C=A/B;
return C+(C*B<A);
}
i64 dn(i64 A,i64 B){
if(B<)B=-B,A=-A;
i64 C=A/B;
return C-(C*B>A);
}
struct pos{
i64 x;
int y;
bool operator<(const pos&w)const{return x<w.x;}
}ps[];
int pp;
void ins(i64 L,i64 R){
ps[pp++]=(pos){L,};
ps[pp++]=(pos){R+,-};
}
struct ln{
i64 k,b,l,r;
i64 at(i64 x){
return k*x+b;
}
void chk(ln w){
i64 L=std::max(l,w.l),R=std::min(r,w.r);
if(L>R)return;
w.k=k-w.k;
w.b=b-w.b;
if(w.at(L)>=){
if(w.at(R)>=)ins(L,R);
else ins(L,dn(-w.b,w.k));
}else if(w.at(R)>=)ins(up(-w.b,w.k),R);
}
bool cmp(ln&w){
return at(l)>=w.at(l);
}
void cut(ln&w){
i64 K=k-w.k,B=b-w.b;
r=dn(-B,K);
w.l=r+;
}
}v1[],v2[];
void push(ln*a,int&ap,ln w){
for(;ap&&a[ap].cmp(w);--ap);
if(ap)a[ap].cut(w);
a[++ap]=w;
}
struct edge{
int x,y,a,b;
void upd(){
for(int i=;i<=n*;++i)if(i+b>=&&i+b<=n*)mins(l[y][i+b],l[x][i]+a);
}
void chk(){
int p1=,p2=;
for(int i=n*;i>=;--i){
if(l[x][i]<inf/)push(v1,p1,(ln){i-n+b,l[x][i]+a,n,inf});
if(l[y][i]<inf/)push(v2,p2,(ln){i-n,l[y][i],n,inf});
}
int i1=,i2=;
while(i1<=p1&&i2<=p2){
v1[i1].chk(v2[i2]);
if(v1[i1].r<=v2[i2].r)++i1;else ++i2;
}
}
}e[];
void ae(int a,int b,int d,int k){
e[ep++]=(edge){a,b,d,k};
}
int main(){
for(scanf("%d",&T);T;--T){
scanf("%d%d%d",&n,&m1,&m2);
ep=;
for(int i=;i<n;++i){
for(int j=;j<=n*;++j)l[i][j]=inf;
}
l[][n]=;
for(int i=;i<n;++i){
int a=i,b=(i+)%n,d=;
ae(b,a,-d,(a>b));
}
for(int i=,a,b,d;i<=m1;++i){
scanf("%d%d%d",&a,&b,&d);
ae(b,a,-d,(a>b));
}
for(int i=,a,b,d;i<=m2;++i){
scanf("%d%d%d",&a,&b,&d);
ae(a,b,d,-(a>b));
}
for(int t=;t<n;++t){
for(int i=;i<ep;++i)e[i].upd();
}
pp=;
for(int i=;i<ep;++i)e[i].chk();
std::sort(ps,ps+pp);
i64 ans=;
for(int i=,s=;i<pp;++i){
s+=ps[i].y;
if(s==ep)ans+=ps[i+].x-ps[i].x;
}
if(ans>inf/)ans=-;
printf("%lld\n",ans);
}
return ;
}
51nod1340 地铁环线的更多相关文章
- 题解 [51nod1340]地铁环线
题解 [51nod1340]地铁环线 题面 解析 本文参考这篇博客 一开始看到只有120行就打算写一写, 结果一刚就是三个星期摆摆摆 本来是当查分约束入门学的. step 1 首先来考虑下如果已知总长 ...
- 51nod1340地铁环线
经典题. 经典差分约束模型. 但是 显然这个总长是有上下界的. 直接二分总长,判断有没有负环 如果没有负环好办,有负环就不知道怎么偏了. 因为没有单调性! (如果所有没有单调性的函数图像,都知道往哪里 ...
- 【51nod 1340】地铁环线
题目 有一个地铁环线,环线中有N个站台,标号为0,1,2,...,N-1.这个环线是单行线,一共由N条有向边构成,即从0到1,1到2,..k到k+1,...,N-2到N-1,N-1到0各有一条边.定义 ...
- [题解] 51 nod 1340 地铁环线
不难看出这是一道差分约束的题目. 但是如果想按照通常的题目那样去建边的话,就会发现这句话--相邻两站的距离至少是1公里--建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了. 这时我们就 ...
- 【51nod】1340 地铁环线
今天头非常疼,躲在家里没去机房 反正都要颓废了,然后花了一上午研究了一下这道神题怎么做-- 题解 首先我们发现,如果我们设\(dis[i]\)为从\(0\)节点走到\(i\)节点的距离 那么题目中给出 ...
- 【UR #2】跳蚤公路
[UR #2]跳蚤公路 参照yjc方法.也就是地铁环线那个题. 求每个点不在负环内的x的取值范围.然后所有1到j能到i的j的范围取交.得到答案. 每个边形如kx+b的直线,每个环也是 每个点不在负环内 ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- P4005 小 Y 和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- 华为上机测试题(地铁换乘-java)
PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写 ...
随机推荐
- 『Python CoolBook』使用ctypes访问C代码_下_demo进阶
点击进入项目 这一次我们尝试一下略微复杂的c程序. 一.C程序 头文件: #ifndef __SAMPLE_H__ #define __SAMPLE_H__ #include <math.h&g ...
- 一个页面多个swiper问题解决
关于一个页面中多处使用swiper而引起的翻页问题 最近公司项目做了一个双12活动,活动页面中存在18个轮播!!!然后在进行swiper声明的时候发现了问题,如果页面只是有一两个轮播,可以直接给每一个 ...
- IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO
IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...
- Flutter(一)安装配置和几个注意点
Flutter(一)安装配置和几个注意点 记住要仰望星空,不要低头看脚下.无论生活如何艰难,请保持一颗好奇心.你总会找到自己的路和属于你的成功. 愿您的来世灵魂依旧,躯体康健. 一句话来形容Flutt ...
- js splice函数 数组增加,替换,删除
splice函数参数介绍: 第一个参数: 对于数数组的操作起始位置. 第二个参数: 从第一个参数开始,删除数组中的个数. 从第三个参数之后所有参数(如果有):执行完第二步之后,都插入到第一个参数的起始 ...
- VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...
- GPU知识了解
前言 今天在使用阿里云的时候,无意间看到了有GPU服务器,于是对它做了一个大概的了解. 概念 GPU是Graphics Processing Unit的缩写,翻译成中文就是图形处理器.是一种专门在个人 ...
- c程序的期望
对于C语言,我认为是我们计算机专业必须掌握的,如果C语言都不能掌握好,我认为在以后的学习中也不会学的有多好,所以,我们要把C语言尽量掌握好,也是在今后的学习中打好基础,多看书,多写一些程序运行,做一些 ...
- 1.2 pip降级selenium3.0
1.2 pip降级selenium3.0 selenium版本安装后启动Firefox出现异常:'geckodriver' executable needs to be in PATHselenium ...
- 权限系统(RBAC)的数据模型设计
前言: RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配. 之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统 ...