51nod1340地铁环线】的更多相关文章

题解 [51nod1340]地铁环线 题面 解析 本文参考这篇博客 一开始看到只有120行就打算写一写, 结果一刚就是三个星期摆摆摆 本来是当查分约束入门学的. step 1 首先来考虑下如果已知总长度\(s\)如何判断是否合法. 显然差分约束 对于\(dis(x,y)>=w\) 这个式子等价于\(dis[x]+w<=dis[y]\), 即\(dis[y]+(-w)>=dis[x]\). 因此, 若\(x<y\),则\(y\)向\(x\)连一条边权为\(-w\)的边. 若\(x&g…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1340 设x为环线的长度,要判断某个特定的x是否可行,不难将题目转为差分约束模型,用最短路求解,每个限制条件对应图中一条边,可行当且仅当图中没有负环. 如果x是整数,用最短路可以构造出整数解,因此现在需要对所有x同时判断,求出x的可行域,再求整数解个数. 由于边权是关于x的一次函数,且一次项系数绝对值<=1,可以用Bellman-Ford算法处理,此时一个点w到源点的距离…
经典题. 经典差分约束模型. 但是 显然这个总长是有上下界的. 直接二分总长,判断有没有负环 如果没有负环好办,有负环就不知道怎么偏了. 因为没有单调性! (如果所有没有单调性的函数图像,都知道往哪里走更优, 岂不是全都可以二分了 ) 但是本题特殊在于,至少还是个区间! 二分左右端点. 负环记录k*mid+b的k,根据k的正负就可以知道哪个方向可能有解. 任意一个负环都可以判断的. #include<bits/stdc++.h> #define reg register int #define…
题目 有一个地铁环线,环线中有N个站台,标号为0,1,2,...,N-1.这个环线是单行线,一共由N条有向边构成,即从0到1,1到2,..k到k+1,...,N-2到N-1,N-1到0各有一条边.定义两站之间的距离,站a与站b间的距离dis(a,b)指从a站出发沿着单行线的边走到达b时所经过的全部长度,即dis(a,b)=dis(a,a+1)+dis(a+1,a+2)+..+dis(k,k+1 mod N)..+dis(b-1,b).提示一下,a>b时路径为a->a+1->...N-1-…
不难看出这是一道差分约束的题目. 但是如果想按照通常的题目那样去建边的话,就会发现这句话--相邻两站的距离至少是1公里--建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了. 这时我们就需要使用断环为链的技巧. 可以设\(len\)为地铁环线总长 那么就需要把\(a→b(a>b)\)的限制条件转换为\(b→a\)的限制条件,比如\(dis(a,b)\leq k\)转换为\(dis(b,a)\geq len-k\).总算能连边建图惹 如果现在要判断是否有解,那方法肯定是\(spfa\…
今天头非常疼,躲在家里没去机房 反正都要颓废了,然后花了一上午研究了一下这道神题怎么做-- 题解 首先我们发现,如果我们设\(dis[i]\)为从\(0\)节点走到\(i\)节点的距离 那么题目中给出的所有关系都变成了\(n\)个变量中两两的大小关系式 这像什么,差分约束哇(听说这是noip知识点?可我noip的时候根本没听过哇qwq) 可是在列关系式的时候,你发现对于\(a -> b\)当(b < a)的时候,我们还需要一个值,就是环的总长,正好是我们需要统计的东西-- 我们先看看关系式怎么…
[UR #2]跳蚤公路 参照yjc方法.也就是地铁环线那个题. 求每个点不在负环内的x的取值范围.然后所有1到j能到i的j的范围取交.得到答案. 每个边形如kx+b的直线,每个环也是 每个点不在负环内的x取值范围是区间, 两次二分, 第一次二分区间左端点,第二次右端点. 如果没有负环,左端点往左偏,右端点往右偏 否则,记录负环的构成:k*mid+b的k的正负,可以得到mid应该往哪里偏. 注意SPFA找负环: 记录has[x]表示到x的最短路已经经过了多少个点, dis[x]最短路,fr[x]是…
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 .通过调查得知,没有线路是环线,也没有线路与自身相交.任意两条不同的线路只会在若干个点上相交,没有重合的部分,且没有三线共点的情况.即,如图所示的情况都是不存在的:…
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 .通过调查得知,没有线路是环线,也没有线路与自身相交.任意两条不同的线路只会在若干个点上相交,没有重合的部分,且没有三线共点的情况.即,如图所示的情况都是不存在的: 小 Y 坐着地铁 0 号线,路上依次经过了 n 个换乘站.她记下了每个换乘站可以换乘的线路编号,发现每条线路与她所乘坐的线路最多只有 2…
PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次).地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18地铁线B(直线)经过车站:B1…