博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
灾后重建 Floyd
阅读量:6983 次
发布时间:2019-06-27

本文共 3654 字,大约阅读时间需要 12 分钟。

题目背景

BBB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。

题目描述

给出BBB地区的村庄数NNN,村庄编号从000到N−1N-1N1,和所有MMM条公路的长度,公路是双向的。并给出第iii个村庄重建完成的时间tit_iti,你可以认为是同时开始重建并在第tit_iti天重建完成,并且在当天即可通车。若tit_iti000则说明地震未对此地区造成损坏,一开始就可以通车。之后有QQQ个询问(x,y,t)(x, y, t)(x,y,t),对于每个询问你要回答在第ttt天,从村庄xxx到村庄y的最短路径长度为多少。如果无法找到从xxx村庄到yyy村庄的路径,经过若干个已重建完成的村庄,或者村庄xxx或村庄yyy在第t天仍未重建完成 ,则需要返回−1-11。

输入输出格式

输入格式:

第一行包含两个正整数N,MN,MN,M,表示了村庄的数目与公路的数量。

第二行包含NNN个非负整数t0,t1,…,tN−1t_0, t_1,…, t_{N-1}t0,t1,,tN1,表示了每个村庄重建完成的时间,数据保证了t0≤t1≤…≤tN−1t_0 ≤ t_1 ≤ … ≤ t_{N-1}t0t1tN1

接下来MMM行,每行333个非负整数i,j,wi, j, wi,j,w,www为不超过100001000010000的正整数,表示了有一条连接村庄iii与村庄jjj的道路,长度为www,保证i≠ji≠jij,且对于任意一对村庄只会存在一条道路。

接下来一行也就是M+3M+3M+3行包含一个正整数QQQ,表示QQQ个询问。

接下来QQQ行,每行333个非负整数x,y,tx, y, tx,y,t,询问在第ttt天,从村庄xxx到村庄yyy的最短路径长度为多少,数据保证了ttt是不下降的。

输出格式:

QQQ行,对每一个询问(x,y,t)(x, y, t)(x,y,t)输出对应的答案,即在第ttt天,从村庄xxx到村庄yyy的最短路径长度为多少。如果在第t天无法找到从xxx村庄到yyy村庄的路径,经过若干个已重建完成的村庄,或者村庄x或村庄yyy在第ttt天仍未修复完成,则输出−1-11。

输入输出样例

输入样例#1:
4 51 2 3 40 2 12 3 13 1 22 1 40 3 542 0 20 1 20 1 30 1 4
输出样例#1:
-1-154

说明

对于30%30\%30%的数据,有N≤50N≤50N50;

对于30%30\%30%的数据,有ti=0t_i= 0ti=0,其中有20%20\%20%的数据有ti=0t_i = 0ti=0且N>50N>50N>50;

对于50%50\%50%的数据,有Q≤100Q≤100Q100;

对于100%100\%100%的数据,有N≤200N≤200N200,M≤N×(N−1)/2M≤N \times (N-1)/2MN×(N1)/2,Q≤50000Q≤50000Q50000,所有输入数据涉及整数均不超过100000100000100000。

知识点不难,重要是idea;

由于保证 t 是严格递增的,那么我们每次更新就行了;

floyd;

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#pragma GCC optimize(2)using namespace std;#define maxn 200005#define inf 0x7fffffff//#define INF 1e18#define rdint(x) scanf("%d",&x)#define rdllt(x) scanf("%lld",&x)#define rdult(x) scanf("%lu",&x)#define rdlf(x) scanf("%lf",&x)#define rdstr(x) scanf("%s",x)typedef long long ll;typedef unsigned long long ull;typedef unsigned int U;#define ms(x) memset((x),0,sizeof(x))const long long int mod = 1e9 + 7;#define Mod 1000000000#define sq(x) (x)*(x)#define eps 1e-4typedef pair
pii;#define pi acos(-1.0)//const int N = 1005;#define REP(i,n) for(int i=0;i<(n);i++)typedef pair
pii;inline ll rd() { ll x = 0; char c = getchar(); bool f = false; while (!isdigit(c)) { if (c == '-') f = true; c = getchar(); } while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return f ? -x : x;}ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);}int sqr(int x) { return x * x; }/*ll ans;ll exgcd(ll a, ll b, ll &x, ll &y) { if (!b) { x = 1; y = 0; return a; } ans = exgcd(b, a%b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}*/int dis[300][300];int n, m;int fixt[maxn];void floyd(int k) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[j][i] = dis[i][k] + dis[k][j]; } }}int main() { //ios::sync_with_stdio(0); rdint(n); rdint(m); for (int i = 0; i < n; i++)rdint(fixt[i]); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++)dis[i][j] = dis[j][i] = 1e9; } for (int i = 0; i <= n; i++) { dis[i][i] = 0; } for (int i = 0; i < m; i++) { int u, v, w; rdint(u); rdint(v); rdint(w); dis[u][v] = dis[v][u] = w; } int cur = 0; int q; cin >> q; while (q--) { int x, y, t; rdint(x); rdint(y); rdint(t); while (cur < n&&fixt[cur] <= t) { floyd(cur); cur++; } if (fixt[x] > t || fixt[y] > t) { cout << -1 << endl; } else { if (dis[x][y] == 1e9)cout << -1 << endl; else cout << dis[x][y] << endl; } } return 0;}

 

转载于:https://www.cnblogs.com/zxyqzy/p/10284451.html

你可能感兴趣的文章
Objective-C:在类中设置不同协议
查看>>
元数据
查看>>
Web Essentials之Browser Link
查看>>
js修改后没反应-看看是不是取的缓存
查看>>
05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系
查看>>
使用GhostDoc为代码生成注释文档
查看>>
Kettle的设计
查看>>
零代码如何打造自己的实时监控预警系统
查看>>
一段关于写书的对话。
查看>>
分布式监控系统Zabbix-3.0.3-完整安装记录 - 添加shell脚本监控
查看>>
Android之查看外部依赖jar的源代码_android private libralies does not allow modifications to source...
查看>>
Redis中的关系查询(范围查询,模糊查询等...)
查看>>
Git常用命令总结【转】
查看>>
【转载】GUID vs INT Debate
查看>>
Hadoop Hive概念学习系列之hive里的分区(九)
查看>>
间歇性失业了
查看>>
【Xamarin.iOS】使用UrhoSharp将3D模型带入增强现实生活
查看>>
Linux 内核驱动--多点触摸接口【转】
查看>>
Button在android程序中的初始化思路
查看>>
iOS: 数据持久化方案
查看>>