最开始看错数据了没看到Q = 100 是50%的数据以为跑q遍floyd能过,结果只有30,其他全t

1、要注意题目中的条件,挖掘一些性质

var code = “92ce4972-7e0f-4a6f-9f3a-4efef328be45”

2、本题的另一个关键的是要对floyd的过程原理比较熟悉,floyd一共有三重循环,第一重循环相当于枚举的决策,也就是能从那个点转移过来,k就是这个中转站,另外两重循环是枚举的状态

3、我们观察到每个村庄的重建时间是递增的,并且询问的时间也是递增或保持不变,所以我们可以在读入每个询问的时间时,看一下是否存在中转站,在这个时间已经建好,并且可以去更新其他点,我们找到所以这样的点去更新,然后cur不用回去,因为询问的时间也是递增的,只需要在读入下一个询问后,查看是否有新的中转点可以去更新其他点即可。

4、经过上面的分析我们可以知道我们只需要跑一遍floyd即可,因为只有满足的中转点才会被用,时间复杂度为O(n^3)

附上floyd的板子

#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; const int N = 210, INF = 1e9; int n, m, Q; int d[N][N]; void Floyd()
{
for(int k = 1; k <= n; k ++)
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
//要取一下最小值这个写的时候老是忘记
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
} int main()
{
cin >> n >> m >> Q;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
if(i == j) d[i][j] = 0;
else d[i][j] = INF; for(int i = 0; i < m; i ++)
{
int a, b, w; cin >> a >> b >> w;
d[a][b] = min(d[a][b], w);
} Floyd(); while(Q --)
{
int a, b; cin >> a >> b;
if(d[a][b] > INF / 2) puts("impossible");
else cout << d[a][b]<<endl;;
} return 0;
}

灾后重建

题目背景

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

题目描述

给出 B 地区的村庄数

N

N

N,村庄编号从

0

0

0 到

N

1

N-1

N−1,和所有

M

M

M 条公路的长度,公路是双向的。并给出第

i

i

i 个村庄重建完成的时间

t

i

t_i

ti​,你可以认为是同时开始重建并在第

t

i

t_i

ti​ 天重建完成,并且在当天即可通车。若

t

i

t_i

ti​ 为

0

0

0 则说明地震未对此地区造成损坏,一开始就可以通车。之后有

Q

Q

Q 个询问

(

x

,

y

,

t

)

(x,y,t)

(x,y,t),对于每个询问你要回答在第

t

t

t 天,从村庄

x

x

x 到村庄

y

y

y 的最短路径长度为多少。如果无法找到从

x

x

x 村庄到

y

y

y 村庄的路径,经过若干个已重建完成的村庄,或者村庄

x

x

x 或村庄

y

y

y 在第

t

t

t 天仍未重建完成,则需要返回 -1

输入格式

第一行包含两个正整数

N

,

M

N,M

N,M,表示了村庄的数目与公路的数量。

第二行包含

N

N

N个非负整数

t

0

,

t

1

,

,

t

N

1

t_0, t_1,…, t_{N-1}

t0​,t1​,…,tN−1​,表示了每个村庄重建完成的时间,数据保证了

t

0

t

1

t

N

1

t_0 ≤ t_1 ≤ … ≤ t_{N-1}

t0​≤t1​≤…≤tN−1​。

接下来

M

M

M行,每行

3

3

3个非负整数

i

,

j

,

w

i, j, w

i,j,w,

w

w

w为不超过

10000

10000

10000的正整数,表示了有一条连接村庄

i

i

i与村庄

j

j

j的道路,长度为

w

w

w,保证

i

j

i≠j

i=j,且对于任意一对村庄只会存在一条道路。

接下来一行也就是

M

+

3

M+3

M+3行包含一个正整数

Q

Q

Q,表示

Q

Q

Q个询问。

接下来

Q

Q

Q行,每行

3

3

3个非负整数

x

,

y

,

t

x, y, t

x,y,t,询问在第

t

t

t天,从村庄

x

x

x到村庄

y

y

y的最短路径长度为多少,数据保证了

t

t

t是不下降的。

输出格式

Q

Q

Q行,对每一个询问

(

x

,

y

,

t

)

(x, y, t)

(x,y,t)输出对应的答案,即在第

t

t

t天,从村庄

x

x

x到村庄

y

y

y的最短路径长度为多少。如果在第t天无法找到从

x

x

x村庄到

y

y

y村庄的路径,经过若干个已重建完成的村庄,或者村庄x或村庄

y

y

y在第

t

t

t天仍未修复完成,则输出

1

-1

−1。

样例 #1

样例输入 #1

4 5
1 2 3 4
0 2 1
2 3 1
3 1 2
2 1 4
0 3 5
4
2 0 2
0 1 2
0 1 3
0 1 4

样例输出 #1

-1
-1
5
4

提示

对于

30

%

30\%

30%的数据,有

N

50

N≤50

N≤50;

对于

30

%

30\%

30%的数据,有

t

i

=

0

t_i= 0

ti​=0,其中有

20

%

20\%

20%的数据有

t

i

=

0

t_i = 0

ti​=0且

N

>

50

N>50

N>50;

对于

50

%

50\%

50%的数据,有

Q

100

Q≤100

Q≤100;

对于

100

%

100\%

100%的数据,有

N

200

N≤200

N≤200,

M

N

×

(

N

1

)

/

2

M≤N \times (N-1)/2

M≤N×(N−1)/2,

Q

50000

Q≤50000

Q≤50000,所有输入数据涉及整数均不超过

100000

100000

100000。

#include <iostream>
#include <cstring>
using namespace std;
const int N = 210, INF = 2e9; long long d[N][N], a[N];
bool st[N];
int n, m; inline void floyd(int k)
{
for(int i = 0; i < n; ++ i)
for(int j = 0; j < n; ++ j)
if(d[i][j] > d[i][k] + d[k][j])
d[i][j] = d[i][k] + d[k][j]; } int main()
{
// freopen("1.in.txt", "r", stdin);
cin >> n >> m;
for(int i = 0; i < n; ++ i) cin >> a[i];
for(int i = 0; i < n; ++ i)
for(int j = 0; j < n; ++ j)
{
if(i == j) d[i][i] = 0;
d[i][j] = INF;
} for(int k = 0; k < m; ++ k)
{
int a, b ,c; cin >> a >> b >> c;
d[a][b] = d[b][a] = c;
} int q, cur = 0;cin >> q;
while(q --)
{
int x, y, t; cin >> x >> y >> t;
while(a[cur] <= t && cur < n)
{
floyd(cur);
cur ++;
}
if(a[x] > t || a[y] > t || d[x][y] == INF) cout << -1 << endl;
else cout << d[x][y] << endl;
}
return 0;
}

flyod的更多相关文章

  1. cdoj 30 最短路 flyod

    最短路 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/30 Descript ...

  2. hdu 3339 In Action 背包+flyod

    In Action Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=333 ...

  3. Codeforces Gym 100733H Designation in the Mafia flyod

    Designation in the MafiaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...

  4. hdu 1599 find the mincost route(flyod求最小环)

    Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1, ...

  5. 最短路Dijkstra和Flyod

    Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...

  6. 『实践』Matlab实现Flyod求最短距离及存储最优路径

    Matlab实现Flyod求最短距离及存储最优路径 一.实际数据 已知图中所有节点的X.Y坐标. 图中的节点编号:矩阵中的编号 J01-J62:1-62; F01-F60:63-122; Z01-Z0 ...

  7. poj 3660 Cow Contest Flyod

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5989   Accepted: 3234 Descr ...

  8. Flyod 算法(两两之间的最短路径)

    Flyod 算法(两两之间的最短路径)动态规划方法,通过相邻矩阵, 然后把最后的结果存在这么一个矩阵里面,(i,j), #include <iostream> #include <v ...

  9. UESTC 30最短路(flyod算法)

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. Codeforces Round #333 (Div. 2) C. The Two Routes flyod

    C. The Two Routes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/602/pro ...

随机推荐

  1. 如何开发 RESTful、GraphQL 和 SOAP 等不同类型的 API ?

    在软件开发中,API(应用程序编程接口)的重要性不言而喻.API已成为不可或缺的构建模块,使开发人员能够创建功能丰富.多样化和可扩展的应用程序.这是一篇综合指南,旨在深入探讨API开发,使初学者和有经 ...

  2. 前端Vuer,请收好这份《Vue组件单元测试》宝典,给自己多一些安全感

    大家好,我是 Kagol. 作为一名前端,在做业务开发的过程中,你是否曾经: 因为担心上线之后出bug,而反复手工验证自己负责的模块 不敢修改现有的"屎山"(别人写的或者是自己1年 ...

  3. Anchored Neighborhood Regression【阅读笔记】GR全局回归

    论文信息 [Anchored Neighborhood Regression for Fast Example-Based uper Resolution]-TIMOFTER, 2013, IEEE ...

  4. hexo博客主题,git上传,报错Template render error的解决方案

    报错信息 INFO Start processing FATAL Something's wrong. Maybe you can find the solution here: http://hex ...

  5. 快速打开指定目录的cmd

    待解决问题 在使用dirsearch.sqlmap等工具时需要进入对应的目录再打开cmd,现要实现配合utools快速打开对应目录的cmd 解决办法:创捷快捷方式 在对应的文件夹下创建一个快捷方式,对 ...

  6. [NOIP2011 提高组] 聪明的质监员【题解】

    题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) ...

  7. Redis核心技术与实践 02 | 数据结构:快速的Redis有哪些慢操作?

    原文地址:https://time.geekbang.org/column/article/268262 博客地址:http://njpkhuan.cn/archives/redis-he-xin-j ...

  8. DataArts Studio实践丨通过Rest Client 接口读取RESTful接口数据的能力

    本文分享自华为云社区<DataArts Studio 通过Rest Client 接口读取RESTful接口数据的能力,通过Hive-SQL存储>,作者: 张浩奇 . Rest Clien ...

  9. 服务端apk打包教程

    本文我将给大家介绍一个 apk 打包工具 VasDolly 的使用介绍.原理以及如何在服务端接入 VasDolly 进行服务端打渠道包操作. 使用介绍 VasDolly 是一个快速多渠道打包工具,同时 ...

  10. debian11安装配置记录

    安装 软件包默认是桌面环境 + gnome + 标准安装.如果做服务器,建议标准安装 + ssh server 设置静态ip cd /etc/network/interfaces.d vi ifcfg ...