首页 > 其他分享 >P1119 灾后重建题解

P1119 灾后重建题解

时间:2024-02-26 12:23:33浏览次数:15  
标签:int 题解 复杂度 cin P1119 算法 灾后 time 一题

目录
\(原题传送门\)

思路

首先先来分析一下算法,Floyd 算法的时间复杂度是 \(O(n^3)\) 虽然很多,但在这一题里很合适。dijkstra 算法用堆优化的时间复杂度是 \(O(m \log n)\),在这一题里会超时。Bellman–Ford 算法的时间复杂度是 \(O(mn)\),会超时。
所以说这一题是能用 Floyd 来解决。
那么具体的细节,就是在每一次的问答里,只要有一个满足 \(\leq time\) 的点那就用这个点来更新所有点。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=205;
int n,m,f[N][N],t[N];
void update(int k){
    for(int i=0;i<n;i++){
        for(int j=0;j<=n;j++){
            if(f[i][j]>f[i][k]+f[k][j]){
                f[i][j]=f[i][k]+f[k][j];
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++)for(int j=0;j<n;j++)f[i][j]=1e9;
    for(int i=0;i<n;i++)f[i][i]=0;
    for(int i=0;i<n;i++)cin>>t[i];
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        f[u][v]=f[v][u]=w;
    }
    int q;cin>>q;
    int i=0;
    while(q--){
        int x,y,time;cin>>x>>y>>time;
        if(t[x]>time||t[y]>time){
            cout<<"-1\n";
            continue;
        }
        while(t[i]<=time&&i<n){
            update(i);
            i++;
        }
        if(f[x][y]==1e9)cout<<"-1\n";
        else cout<<f[x][y]<<"\n";
    }
}

标签:int,题解,复杂度,cin,P1119,算法,灾后,time,一题
From: https://www.cnblogs.com/williamYcY/p/18034037

相关文章

  • 2024牛客寒假算法基础集训营6 K 错综的统一 题解
    Question2024牛客寒假算法基础集训营6K错综的统一一个矩阵仅由"r",“e”,“d”组成一个矩阵区域是美丽的,当且仅当:在矩形区域内,任意横向或纵向取一个长度大于\(1\)的连续字串是,该字符串都不是回文的现在有\(Q\)次询问,每次给定一个矩阵,问最少修改多少字符(字符只能修改"r"......
  • LG5290/LOJ3052 春节十二响 题解(启发式合并)
    考虑当这个东西是一条链的时候我们该怎么做,显然\(1\)​会有两个儿子,然后两个儿子分别是一条链。所以我们可以给两个儿子的链上的所有节点分别加到两个堆里,每次取出两个堆的最大值加入到我们选择的答案中,然后把两个堆的最大值全部pop掉。最终的答案就是我们pop完一个堆之后,......
  • 【Python】conda基本使用、pip换源、pip超时问题解决
    conda问题往期笔记conda安装:https://www.cnblogs.com/mllt/p/Anaconda-install.htmlconda基础操作https://www.cnblogs.com/mllt/p/jqsj_base_000.html创建环境命令行创建环境的方式见上文“conda基础操作”后面的链接文章。在此演示的是使用pycharm创建conda虚拟环境......
  • P1975 [国家集训队] 排队 题解
    题目链接:排队水紫,\(n\)不大,树套树或者分块都能做。分块的话,最优序列分块套套值域分块最优。观察到是可差性问题维护,即权值数量维护,那我们就树状数组套权值线段树即可。由于\(n\)不大,我们可以不用回收标记,直接数组空间开大点就行。我们预处理出初始逆序对,每一次操作都是基于......
  • 2024牛客寒假算法基础集训营6 H 纷乱的红线 题解
    Question2024牛客寒假算法基础集训营6H纷乱的红线小红拿到了一个圆,以及平面上有\(n\)个点(保证没有三点共线)。现在小红将随机取\(3\)个点画一个三角形,她想知道这个三角形和圆的交点数量的期望是多少?Solution考虑到\(n\le1000\)可以枚举每一条线,计算这一条线和圆的交......
  • AT_abc213_d [ABC213D] Takahashi Tour 题解(图&深搜)
    传送门题意有一个\(n\)个点的无向图。从根节点\(1\)开始,按如下规则遍历整个图:如果有连接这个点的其他点没有走过,则到这个点。如果有多个点,那么按从小到大的顺序走。如果有这个点没有其他点或者连接这个点的其他点都走过了,那么:如果这个点是根节点\(1\),结束。否则回......
  • 2024牛客寒假算法基础集训营6 G 人生的起落 题解
    Question2024牛客寒假算法基础集训营6G人生的起落定义一个三元组\((x,y,z)\)是“v-三元组”当且仅当该三元组满足以下条件:\(x=z\)\(x>y\)现在需要你构造一个\(n\)个正整数组成的数组,所有元素之和恰好等于\(S\),且恰好有\(k\)个长度威\(3\)的连续子数组......
  • Atcoder Beginner Contest 342 全题解
    A-Yay!题意给定字符串\(s\)已知该字符串中只有一个字符与其他字符不同求这个字符思想开一个数组\(cnt_i\)来记录\(s\)中每个字符出现的次数,一个数组\(first_i\)来记录\(s\)中每个字符第一次出现的下标。选择\(cnt_i=1\)的\(i\)输出\(first_i\)......
  • UVA12422 (Kengdie) Mua (II) - Expression Evaluator 题解
    题目传送门闲话蒟蒻的第一篇黑题题解!连着花了\(12\)个小时才做出来,打代码\(6\)小时,调试\(6\)小时。一开始怎么编也编不过,直到看到了tiger大神的题解才豁然开朗。思路本题主要是输出函数或运算式子的结果,最重要的就是判断优先级。tiger大神提出了表达式树法和递归......
  • Atcoder ABC 342 全题解
    闲话当我还是一个只会AB的小蒟蒻时,由于不会C又看不懂官方题解,只好看网上的题解。结果:ABC签到题不讲AB对着题意模拟即可。A有个好玩的做法,先看前两个,如果不同跟第三个比较,如果相同看后面哪个字母跟第一个不一样。C由于是将所有的$c_i$替换,所以可得同一个字母最......