zoukankan      html  css  js  c++  java
  • Floyd(选地址)

    Description

    小X有很多朋友,分布在N个城市。。
    NN个城市之间,有些有直接的道路,有些是间接联通的(保证任何两个城市都可以相互到达。。)
    但是、经过每条道路都是有代价的、
    于是。。
    小X希望你来帮他找出一个城市,使得他的所有朋友到这个城市的代价最小。

    Input

    输入共2n+1行,
    其中第一行为一个整数N
    第2~N+1行,每行有N个整数、表示两个城市间的代价、(0表示不直接连通)
    n+2~2N+1行,每行一个整数。表示每个城市中小X的朋友数。

    Output

    输出有两行。
    第一行为你选中的城市
    第二行为最小需要的代价。

    Samples

    Input Copy
    5
    0 1 2 0 0 
    1 0 0 0 20
    2 0 0 10 0
    0 0 10 0 1
    0 20 0 1 0
    2
    3
    4
    5
    6
    Output
    4
    109

    Hint

    对于100%的数据,n200, 输出保证不超过long int

    Source

    石光中学 2018泉州集训普及组day5

    这个题就是 Floyd处理一下矩阵

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=1e3+100;
    ll a[maxn][maxn];
    ll dis[maxn];
    ll q[maxn];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>a[i][j];
                if(a[i][j]==0){
                    a[i][j]=0x3f3f3f3f;
                }
            } 
        } 
        for(int i=1;i<=n;i++){
            a[i][i]=0;
        }
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
                }
            }
        }
        for(int i=1;i<=n;i++){
            cin>>q[i];
        }
        ll ans=0x3f3f3f3f;
        int x;
        for(int i=1;i<=n;i++){
            ll z=0;
            for(int j=1;j<=n;j++){
                z+=q[j]*a[i][j];
            }
            if(z<ans){
                ans=z;
                x=i;
            }
        } 
        cout<<x<<endl<<ans<<endl;
    }
  • 相关阅读:
    巴基斯坦:软件服务外包行业的后来者 (zz)
    对象集合查询
    我的db类库 新版
    得到web.config里配置项的数据库连接字符串
    jdk环境变量配置
    FastReport v3.2.5在BDS2006中的安装方法
    CONFIG.SYS文件的命令与配置
    DOS下内存的配置
    动态注册ODBC数据源的通用方法
    XP下安装装SQL2000企业版本
  • 原文地址:https://www.cnblogs.com/lipu123/p/14305892.html
Copyright © 2011-2022 走看看