最短路与floyd相关
wanherun
今天会有好事发生吗
展开
-
bzoj3018 [Usaco2012 Nov]Distant Pastures
题目一开始还被吓了一跳,但是,仔细想想也很简单。题目翻译有毒。。 D(S,T)是S到T的最短距离。。这样,我们只需要枚举起点,然后跑一边最短路,求一下最大值就好了。#include<bits/stdc++.h>using namespace std;int n,A,B,id[35][35],ans,dis[1005],vis[1005];char mp[35][35];int first[原创 2017-12-10 09:18:57 · 399 阅读 · 0 评论 -
[hdu1599]find the mincost route
一句话题意:求无向图的最小环的长度。emm,这应该算是模板题或者叫floyd的经典应用吧。#include<bits/stdc++.h>#define inf 100000000using namespace std;int n,m,x,y,z;int f[105][105],g[105][105];inline void floyd(){ int mini=inf; f原创 2017-12-03 18:54:52 · 301 阅读 · 0 评论 -
bzoj1612 [Usaco2008 Jan]Cow Contest奶牛的比赛
题目要想确定一个奶牛的排名,只要知道比它强的有多少个,比它弱的有多少个,并且加起来为人数减一。之后就只需要知道有多少人比他弱或强就好了。 可以考虑floyd来做,类似最短路:f[i][j]=f[i][j]||(f[i][k]&&f[k][j])要么本来就联通,要么用一个辅助的k。#include<bits/stdc++.h>using namespace std;int n,m,x,y;i原创 2017-11-09 14:32:12 · 210 阅读 · 0 评论 -
bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
题目又是最小最大值问题,这显然是满足二分性质的。二分最大值,把权值比它小的边新权值设为0,比它大的设为1。然后再跑一遍最短路,比较到n的距离与k的大小就好了。#include<bits/stdc++.h>#define N 20000using namespace std;int n,p,k,l,r,mid,mn,x,y,z;int first[N+5],nxt[N+5],to[N+5],v原创 2017-11-09 14:24:40 · 250 阅读 · 0 评论 -
bzoj1774 [Usaco2009 Dec]Toll 过路费
题目一道不算太水的题吧。总体来讲是用floyd来做,不过有一个点权就比较讨厌了。先把点权从小到大排序,然后floyd就好了吧,具体看代码。其实,这也可以当一个模板吧。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>usin原创 2017-10-18 23:44:46 · 213 阅读 · 0 评论 -
bzoj3402 [Usaco2009 Open]Hide and Seek 捉迷藏
题目呀哈哈,水题,spfa裸题,不说什么了。#include<bits/stdc++.h>#define N 20000#define M 100000using namespace std;int n,m,x,y,mx,cnt;int first[N+5],nxt[M+5],to[M+5],siz;int dis[N+5],vis[N+5];inline char nc(){原创 2017-10-10 22:50:38 · 253 阅读 · 0 评论 -
bzoj1179 [Apio2009]Atm
题目这题,咋一看,没什么思路。我们这样想,一个强连通分量中的点显然可以互相到达,所以就不需要考虑了,先缩点。然后重构图,跑一遍SPFA就好了,注意显然不会有环。#include<bits/stdc++.h>#define N 600000using namespace std;int n,m,A[N+1],x,y,s,p;int first[N+1],nxt[N+1],to[N+1],siz原创 2017-09-21 22:40:48 · 209 阅读 · 0 评论 -
bzoj4152 [AMPPZ2014]The Captain
题目最短路是很显然的吧。但是,如果每条边都建出来的话,怕是就算是spfa的O(m)都跑不出来(笑)。。。。所以,考虑优化建边,按照x排序,相邻两个之间建边就好了,再来y排序,这样,只有n条边了。#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; #原创 2017-09-12 10:36:48 · 222 阅读 · 0 评论 -
bzoj1003 [ZJOI2006]物流运输
题目预处理cost[i,j]表示第i天到第j天都跑这条路的最短路。也就是说保证路径上的所有点在i到j天都可以跑的前提下的最短路。 然后dp。f[i]表示前i天的最小费用,那么f[i]=min{f[j]+cost[j+1,i+k]} ,初始值f[i]=cost[1,i]。 先用spfa预处理。然后转移的时候O(1)就好了。#include<bits/stdc++.h>#define LL原创 2017-09-02 20:50:49 · 499 阅读 · 0 评论