zoukankan      html  css  js  c++  java
  • 【codevs2011】【LNOI2013】最小距离之和

    floyed水题

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 
     9 #define INF 30000000
    10 #define N 210
    11 
    12 struct Node
    13 {
    14     int f,t,v;
    15     int ans;
    16 }e[N];
    17 
    18 int g[N][N];
    19 
    20 int n,m;
    21 
    22 int main()
    23 {
    24     scanf("%d",&n);    
    25     for (int i=1;i<=n;i++)
    26         for (int j=1;j<=n;j++)
    27             scanf("%d",&g[i][j]);
    28     scanf("%d",&m);    
    29     for (int i=1;i<=m;i++)
    30     {
    31         scanf("%d%d",&e[i].f,&e[i].t);
    32         e[i].v=g[e[i].f][e[i].t];
    33         g[e[i].f][e[i].t]=INF;
    34     }
    35     for (int k=1;k<=n;k++)
    36         for (int i=1;i<=n;i++)
    37             for (int j=1;j<=n;j++)
    38                 g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
    39         for (int i=1;i<=n;i++)
    40         for (int j=1;j<=n;j++)
    41             e[m].ans+=g[i][j];
    42     for (int k=m;k>=1;k--)
    43     {
    44         for (int i=1;i<=n;i++)
    45             for (int j=1;j<=n;j++)
    46                 g[i][j]=min(g[i][j],g[i][e[k].f]+g[e[k].t][j]+e[k].v);   
    47         for (int i=1;i<=n;i++)
    48             for (int j=1;j<=n;j++)
    49                 e[k-1].ans+=g[i][j];
    50     }
    51     for (int i=1;i<=m;i++)
    52         if (e[i].ans>=INF)
    53             printf("INF
    ");
    54         else
    55             printf("%d
    ",e[i].ans);
    56     return 0;
    57 }
  • 相关阅读:
    第二次作业——App案例分析
    第一次作业--四则运算
    一点感想
    结对编程1
    第二次作业
    第一次作业-四则运算
    我的第一篇博客
    第二次作业
    结对编程
    第二次作业 APP分析
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5380422.html
Copyright © 2011-2022 走看看