zoukankan      html  css  js  c++  java
  • E

    连接https://atcoder.jp/contests/abc143/tasks/abc143_e

    题目大意:

    在一个无向图中,当前的油量为L,给出q个问题,判断从a到b需要多少加几次油,路上每个节点都可以加油,输出需要加油的最少次数

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=500;
    typedef long long ll;
    const ll inf=1e15+7;
    ll arr[N][N];
    ll brr[N][N];
    int main(){
        ll n,m,l;
        cin>>n>>m>>l;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){
                if(i!=j) arr[i][j]=brr[i][j]=inf;
            }
        
        ll x,y,z;
        
        for(int i=1;i<=m;i++){
            scanf("%lld%lld%lld",&x,&y,&z);
            arr[x][y]=z;
            arr[y][x]=z;
        }
        
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    arr[i][j]=min(arr[i][j],arr[i][k]+arr[k][j]);
        }
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){
                if(arr[i][j]<=l&&i!=j) brr[i][j]=1; 
            }
        
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    brr[i][j]=min(brr[i][j],brr[i][k]+brr[k][j]);
        }
        int q;
        cin>>q;
        while(q--){
            int a,b;
            cin>>a>>b;
            if(brr[a][b]>=inf) cout<<-1<<endl;
            else cout<<brr[a][b]-1<<endl;
        }    
        return 0;
    }
  • 相关阅读:
    3.26
    3.25
    3.24
    3.23 JS学习
    3.22 团队作业1 疫情数据可视化
    3.19 个人作业1源码
    3.18 个人作业源码
    5.06python
    5.05Android
    5.04Android
  • 原文地址:https://www.cnblogs.com/Accepting/p/11716229.html
Copyright © 2011-2022 走看看