灾后重建

博客介绍了一道用Floyd算法解决的蓝题,解题思路简单,代码不超过50行,只需注意判断满足题目要求。还给出了题目链接和代码转载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Time Gate]

https://www.luogu.org/problemnew/show/P1119

【解题思路】

一道不超过50行的Floyd解决蓝题

注意判断满足题目要求即可

【code】

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 const int INF=0x3f;
 6 int i,j,n,m,dis[205][205],t[40005],q,k,a,b,c;
 7 void Floyd(){
 8     int i,j;
 9     for(;k<=n;k++)
10         if(t[k]<=c)
11             for(i=1;i<=n;i++)
12                 for(j=1;j<=n;j++)
13                     dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
14         else break;
15 }
16 int main(){
17     //freopen("1119.in","r",stdin);
18     //freopen("1119.out","w",stdout);
19     scanf("%d%d",&n,&m);
20     memset(dis,0x3f,sizeof(dis)); 
21     memset(t,0x3f,sizeof(t)); 
22     for(i=1;i<=n;i++)
23         scanf("%d",&t[i]);
24     for(i=1;i<=n;i++)
25         dis[i][i]=0;
26     for(i=1;i<=m;i++){
27         scanf("%d%d%d",&a,&b,&c);
28         a++;
29         b++;
30         dis[a][b]=dis[b][a]=c;
31     }
32     scanf("%d",&q);
33     k=1;
34     while(q--){
35         scanf("%d%d%d",&a,&b,&c);
36         a++;
37         b++;
38         Floyd();
39         if(dis[a][b]==0x3f3f3f3f||t[a]>c||t[b]>c) 
40             printf("-1\n");
41         else printf("%d\n",dis[a][b]);
42      }
43     return 0;
44 }

 

转载于:https://www.cnblogs.com/66dzb/p/11188154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值