码迷,mamicode.com
首页 > 其他好文 > 详细

Floyd

时间:2019-08-20 00:46:43      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:span   模板题   main   tps   using   www   题解   test   solution   

Floyd

参考:Floyd 算法 第一篇Floyed题解

模板题:寻宝之路Clear And Present Danger 牛栏Cow Hurdles

Floyd的思路:首先 \(f[i][j]\) 表示的是 \(i\)\(j\) 的最短路径的长度, \(f[i][j]\)初始化的时候,如果 \(i\)\(j\) 有一条直接相连的边,长为 \(w\) ,那么就让 \(f[i][j]=w\)\(i\)\(j\) 的路径在经过了某个不知名的 \(k\) 点之后而变短了,那么我们现在就需要枚举每一个 \(k\) 点对所有的 \(i\)\(j\) 可能产生的作用,具体实现为\(f[i][j]=min(f[i][j],f[i][k]+f[k][j])\)\(k,i,j\) 都从\(1\)~\(n\)开始遍历

寻宝之路Clear And Present Danger

// Created by CAD on 2019/8/18.
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxn=1e5+5;
ll a[maxn],f[105][105];
int main()
{
    int n,m; cin>>n>>m;
    for(int i=1;i<=m;++i) cin>>a[i];
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            cin>>f[i][j];
    for(int k=1;k<=n;++k)
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
    ll ans=0;
    for(int i=1;i<m;++i)
        ans+=f[a[i]][a[i+1]];
    cout<<ans<<endl;
}

牛栏Cow Hurdles

// Created by CAD on 2019/8/19.
#include <bits/stdc++.h>
#define test(n) cout<<n<<endl
using namespace std;
using ll=long long;
int f[305][305];
int G[305][305];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,m,t;
    cin>>n>>m>>t;
    for(int i=1,s,e,w;i<=m;++i)
        cin>>s>>e>>w,G[s][e]=f[s][e]=w;
    for(int k=1;k<=n;++k)
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                if((!f[i][j])&&f[i][k]&&f[k][j]) f[i][j]=max(f[i][k],f[k][j]);
                else if(f[i][k]&&f[k][j])
                f[i][j]=min(f[i][j],max(f[i][k],f[k][j]));
    while(t--)
    {
        int s,e; cin>>s>>e;
        if(!f[s][e]) test(-1);
        else test(f[s][e]);
    }
    return 0;
}

Floyd

标签:span   模板题   main   tps   using   www   题解   test   solution   

原文地址:https://www.cnblogs.com/CADCADCAD/p/11380530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!