最短路
ModestCoder_
一个modest的coder
展开
-
【题解】LOJ2350:「JOI 2018 Final」月票购买
原题传送门可以很套路地得到一个结论,答案与月票的路径有一段连续的重复路径以s,t,u,vs,t,u,vs,t,u,v为起点跑四次最短路现在我们枚举两个月票最短路上的点x,yx,yx,yans=min(ans,disu[x]+disv[y],disu[y]+disv[x])ans=min(ans,dis_u[x]+dis_v[y],dis_u[y]+dis_v[x])ans=min(ans,disu[x]+disv[y],disu[y]+disv[x])对于一个xxx,disu[x],dis原创 2020-12-01 14:10:54 · 479 阅读 · 0 评论 -
【题解】LuoGu4610:[COI2012] KAMPANJA
原题传送门先用floydfloydfloyd预处理出wx,yw_{x,y}wx,y表示x−>yx->yx−>y的最短路所以x−>yx->yx−>y最少经过wx,y+1w_{x,y}+1wx,y+1个不同的点考虑最短路disu,vdis_{u,v}disu,v表示1−>u−>v−>11->u->v->11−>u−>v−>1最少经过不同的点枚举状态(i,j)(i,j)(i,j)disi,j<−di原创 2020-11-06 18:38:48 · 226 阅读 · 0 评论 -
【题解】LuoGu5201:[USACO19JAN]Shortcut G
原题传送门先跑一遍最短路,求出nxtunxt_unxtu表示我下一步走到哪里,然后跑一个拓扑Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;struct heap{ int node; LL len; bool operator < (const heap &x) const{return x.len < len; }};p原创 2020-09-20 18:37:31 · 326 阅读 · 0 评论 -
【题解】HDU6166:Senior Pan
原题传送门这是一种原创 2020-09-16 11:16:38 · 142 阅读 · 0 评论 -
【题解】LuoGu1993:小 K 的农场
原题传送门差分约束操作1:addedge(b,a,c)addedge(b,a,c)addedge(b,a,c)操作2:addedge(a,b,−c)addedge(a,b,-c)addedge(a,b,−c)操作3:addedge(a,b,0),addedge(b,a,0)addedge(a,b,0),addedge(b,a,0)addedge(a,b,0),addedge(b,a,0)用spfaspfaspfa跑个最长路Code:#include <bits/stdc++.h>原创 2020-08-28 14:01:09 · 771 阅读 · 0 评论 -
【题解】LuoGu3275:[SCOI2011]糖果
原题传送门差分约束考虑如何连边,建立一个超级源点0addedge(0,i,1)addedge(0,i,1)addedge(0,i,1)对于接下来的关系opt=1,addedge(x,y,0),addedge(y,x,0)opt=1,addedge(x, y, 0),addedge(y,x,0)opt=1,addedge(x,y,0),addedge(y,x,0)opt=2,addedge(x,y,1)opt=2,addedge(x,y,1)opt=2,addedge(x,y,1)opt=3,原创 2020-08-24 16:07:12 · 168 阅读 · 0 评论 -
【题解】LuoGu2865:[USACO06NOV]Roadblocks G
原题传送门求严格次小最短路直接用dijkstra求令disu,0dis_{u,0}disu,0为最短路,disu,1dis_{u,1}disu,1为次短路初始化只有dis1,0dis_{1,0}dis1,0是0,其他都是inf对于一条边(u,v,l)路径长度为l(u,v,l)路径长度为l(u,v,l)路径长度为l若disv,0>disu,0+l,则disv,0=disu,0+l若dis_{v,0}>dis_{u,0}+l,则dis_{v,0}=dis_{u,0}+l若disv原创 2020-08-24 15:39:25 · 169 阅读 · 0 评论 -
【题解】LuoGu2149:[SDOI2009]Elaxia的路线
原题传送门先以x1,x2,y1,y2x1,x2,y1,y2x1,x2,y1,y2为起点跑四遍最短路答案一定是一条链对于一条边,同时是x1−>y1,x2−>y2x1->y1,x2->y2x1−>y1,x2−>y2的最短路中的边,是这条边是答案中的一条边的必要条件如何刻画?disx1−>i+leni,j+disy1−>j=disx1−>y1dis_{x1->i}+len_{i,j}+dis_{y1->j}=dis_{x1->y1原创 2020-08-20 15:21:00 · 218 阅读 · 0 评论 -
【题解】LuoGu1841:[JSOI2007]重要的城市
原题传送门floydfloydfloyd算出两两之间最短路distdistdist以及最短路方案数numnumnum对于两个城市j,kj,kj,k,iii是j到kj到kj到k最短路非走不可的城市的充要条件是distj,k=distj,i+disti,k且numj,k=numj,i∗numi,kdist_{j,k}=dist_{j,i}+dist_{i,k}且num_{j,k}=num_{j,i}*num_{i,k}distj,k=distj,i+disti,k且numj,k=numj,i∗nu原创 2020-08-12 15:33:47 · 139 阅读 · 0 评论 -
【题解】LuoGu5663:加工零件
原题传送门传送带可以理解为边权为1的一条边题目可以转化成一个可以重复来回走的无向图中,对于每个询问(a,L)(a,L)(a,L),询问1是否有到aaa长度为LLL的路径那么如果两个点之间存在长度为xxx的路径,那么这两个点必定存在长度为x+2x+2x+2的路径但是这两个点之间却不一定存在长度为x−2x-2x−2,或是x+1x+1x+1的路径所以我们可以求1到每个点的奇数最短路和偶数最短路,用dijkstra就好了Code:#include <bits/stdc++.h>#defi原创 2020-08-01 12:52:11 · 260 阅读 · 0 评论 -
【题解】LuoGu3645:[APIO2015]雅加达的摩天楼
原题传送门O(n2)O(n^2)O(n2)暴力连边然后最短路,可以拿到57考虑如何优化考虑对ppp分块p>np>\sqrt{n}p>n,直接暴力连边p<=np<=\sqrt{n}p<=n,考虑分层图最短路,把图分成(n+1)(\sqrt{n}+1)(n+1)层,第i(i>0)i(i>0)i(i>0)层只在(u,u+i)(u,u...原创 2019-12-12 21:28:22 · 192 阅读 · 0 评论 -
【题解】LuoGu4568:[JLOI2011]飞行路线
原题传送门很妙的套路,分层图跟以前的一道题目比较比较建立(k+1)(k+1)(k+1)层图,相邻两层的点之间可以互相走到就是走一条免费边起点是sss,终点是k∗n+tk*n+tk∗n+tCode:#include <bits/stdc++.h>#define maxn 2500010using namespace std;struct Edge{ int to, n...原创 2019-11-04 21:08:22 · 232 阅读 · 0 评论 -
【题解】LuoGu2446: [SDOI2010]大陆争霸
原题传送门连接两个城市的道路可能不止一条,也可能存在一个城市自己到自己的道路。接下来M行,每行三个正整数ui, vi, wi,表示有一条从城市ui到城市vi的单向道路,自爆机器人通过这条道路需要wi的时间。好了,以上是本题坑点一看不是特别好做,想到最短路记录两个量dis,opendis,opendis,open分别表示最短路与将所有保护自己的结界摧毁所需最短时间那么对于一个点真正的最短...原创 2019-10-01 18:23:10 · 185 阅读 · 0 评论 -
【题解】LuoGu1608:路径统计
原题传送门没什么特别之处,就是最短路+统计路径主要是一些坑点有重边单向边我不得已的用邻接矩阵存了Code:#include <bits/stdc++.h>#define maxn 2010using namespace std;int dis[maxn], n, m, cnt[maxn], vis[maxn], line[maxn][maxn];struct ...原创 2019-09-14 17:44:11 · 211 阅读 · 0 评论 -
【题解】CF570E:Breaking Good
原题传送门比较好的最短路题目需要求最短路情况下修改路通断状态数最少想到跑最短路的过程中记两个变量dis,safedis,safedis,safe分别表示到该点的最短路以及最短路情况下路径上最多通边条数显然使得路径上通边最多那么就能使得没经过的边集中断边最多然后记录一个路径的pre把路径存下来,最终统计答案即可Code:#include <bits/stdc++.h>#...原创 2019-09-13 11:18:03 · 330 阅读 · 0 评论 -
【题解】LuoGu1073:Noip2009最优贸易
方法来自这位大佬 LuoGu题目传送门 【题解】 此题有一个非常巧妙的方法——分层图+SPFA 由题意可知,输出的答案只跟买入卖出价格有关,且买入卖出仅限一次 如果是普通宽搜的话我们很难维护这个买入卖出的状态,更新答案也比较麻烦这个分层图方法就很方便 我们建立三层图第一层:初始道路,可以走来走去没有权值第二层:在同一层可以跟第一层一样走来走去,但是是从第一层通过来的,由第一...原创 2018-08-06 21:56:22 · 247 阅读 · 0 评论 -
【学习笔记】dijkstra堆优化
LuoGu例题 我参考了这篇博文 首先介绍普通的dijkstra算法 dijkstra用于求单源最短路,但不支持负权 dijkstra算法的过程中把点分成两类,定义蓝点为已确定最短路的点,白点为未确定最短路的点 操作为下:确定起点s,s为蓝点,初始化dis[s]=0,其他的dis=maxlongint在白点中找dis值最小的,它已确定最短路,标记为蓝点进行松弛操作,把跟当前拿出...原创 2018-08-21 17:05:39 · 923 阅读 · 0 评论 -
【题解】LuoGu3393:逃离僵尸岛
原题传送门 题目描述小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家。该国有N个城市,城市之间有道路相连。一共有M条双向道路。保证没有自环和重边。K个城市已经被僵尸控制了,如果贸然闯入就会被感染TAT…所以不能进入。由其中任意城市经过不超过S条道路就可以到达的别的城市,就是危险城市。换句话说只要某个没有被占城市到某个被占城市不超过s距离,就是危险。小a住在1...原创 2018-08-21 20:40:28 · 851 阅读 · 0 评论 -
【题解】LuoGu3106:[USACO14OPEN]GPS的决斗Dueling GPS's
原题传送门 题目描述Farmer John has recently purchased a new car online, but in his haste he accidentally clicked the “Submit” button twice when selecting extra features for the car, and as a result the car ...原创 2018-08-24 22:00:42 · 239 阅读 · 0 评论 -
【题解】最短路二题
LuoGu1576:最小花费 题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。输入输出格式 输入格式: 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人...原创 2018-09-16 21:04:40 · 1221 阅读 · 0 评论 -
【题解】LuoGu3003:[USACO10DEC]苹果交货Apple Delivery
原题传送门贝西有两个又香又脆的红苹果要送给她的两个朋友。当然她可以走的C(1<=C<=200000)条“牛路”都被包含在一种常用的图中,包含了P(1<=P<=100000)个牧场,分别被标为1…P。没有“牛路”会从一个牧场又走回它自己。“牛路”是双向的,每条牛路都会被标上一个距离。最重要的是,每个牧场都可以通向另一个牧场。每条牛路都连接着两个不同的牧场P1_i和P2_i...原创 2018-10-19 21:55:52 · 291 阅读 · 0 评论 -
【题解】LuoGu3953/noip2017:逛公园
原题传送门题目描述策策同学特别喜欢逛公园。公园可以看成一张NN个点MM条边构成的有向图,且没有 自环和重边。其中1号点是公园的入口,NN号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间。策策每天都会去逛公园,他总是从1号点进去,从NN号点出来。策策喜欢新鲜的事物,它不希望有两天逛公园的路线完全一样,同时策策还是一个 特别热爱学习的好孩子,它不希望每天在逛公园这件事...原创 2018-10-22 21:04:28 · 313 阅读 · 0 评论 -
【题解】LuoGu2047:[NOI2007]社交网络
原题传送门题目描述在社交网络(social network)的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。在一个社交圈子里有n个人,人与人之间有不同程度的关系。我 们将这个关系网络对应到一个n个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两 个人之间的关系越密切。我们可以用对应结点之间的最短路长度...原创 2019-02-10 17:15:17 · 569 阅读 · 0 评论 -
【题解】BZOJ4152:[AMPPZ2014]The Captain
原题传送门两两连边,边太多了!怎么办?注意到有些边是什么用也没有的,考虑连一些有用边min(|x1-x2|,|y1-y2|)是个幌子,其实两个都连一遍就好了,反正等一下跑最短路无影响然后只要分别按照x、y排序,相邻两个点连边就行了,其他边都是多余的最后跑一个dijkstraCode:#include <bits/stdc++.h>#define maxn 200010...原创 2019-07-15 13:05:49 · 231 阅读 · 0 评论 -
【题解】CF545E:Paths and Trees
原题传送门题意神奇,反正我是理解了好长的时间差不多就是求一个生成树,使得任意点到源点的最短路等于原图中的最短路再让这个生成树边权和最小很显然得先dij一下考虑dij过程中松弛的条件,跟一般的dij不一样,为了满足本题的要求,还要生成树边权最小自然是两点间路程相等情况下,经过的边数越多越好(感性理解一下)最短路跑出之后如何得知建出来的生成树?简单,对于每个点开一个preprepre数...原创 2019-07-30 17:29:53 · 264 阅读 · 0 评论 -
【题解】LuoGu3044:[USACO12FEB]搬迁Relocation
原题传送门突破口就是这个k<=5k<=5k<=5可以以每个市场为源点,跑最多5次dijkstradijkstradijkstra,时间复杂度O(knlogn)O(knlogn)O(knlogn)然后对kkk个市场进行全排列,枚举农场,计算一次距离,时间复杂度O(nk!)O(nk!)O(nk!)总时间复杂度O(knlogn+nk!)O(knlogn+nk!)...原创 2019-09-08 19:57:36 · 233 阅读 · 0 评论 -
【题解】codeforces25C Roads in Berland
There are n cities numbered from 1 to n in Berland. Some of them are connected by two-way roads. Each road has its own length — an integer number from 1 to 1000. It is known that from each city it is ...原创 2018-08-05 19:58:44 · 556 阅读 · 0 评论