SDUT 2929 人活着系列之芳姐和芳姐的猪

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2929

人活着系列之芳姐和芳姐的猪

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

芳姐特别喜欢猪,所以,她特意养了m个猪圈,顺便在k条无向边,每条边有都有起点v,距离.....芳姐和猪们约定好,每天去一个固定猪圈去吃饭,芳姐为了不累着她可爱的猪们,想知道所有的猪吃饭走的最短路程是多少?

输入

 第一行 ,猪的个数 mk(1<=k<=1200).(猪的编号为 1..m)

N+1N头猪所在的猪圈号n+k+1行:u1<=w<=255)

m个猪圈连通。

输出

 

示例输入

3 4 5
2
3
4
1 2 1
1 3 5
2 3 7
2 4 3
3 4 5

示例输出

8
标配版Floyd算法代码如下:

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5. using namespace std;  
  6. int main()  
  7. {  
  8.     int n, m, k;  
  9.     while(~scanf("%d %d %d", &n, &m, &k))  
  10.     {  
  11.         int a[1200+5][1200+5], b[1000+5];  
  12.         for(int i=0;i<=m;i++)  
  13.             for(int j=0;j<=m;j++)  
  14.             if(i==j) a[i][j]=0;  
  15.             else a[i][j]=0x3f3f3f3f;  
  16.         for(int i=1;i<=n;i++)  
  17.             scanf("%d", &b[i]);  
  18.         for(int i=1;i<=k;i++)  
  19.         {  
  20.             int u, v, w;  
  21.             scanf("%d %d %d", &u, &v, &w);  
  22.             if(a[u][v]>w)  
  23.                 a[u][v]=a[v][u]=w;  
  24.         }  
  25.         for(int k=1;k<=m;k++)  
  26.            for(int i=1;i<=m;i++)  
  27.             for(int j=1;j<=m;j++)  
  28.                 if(a[i][j]>a[i][k]+a[k][j])  
  29.                    a[i][j]=a[i][k]+a[k][j];  
  30. //        for(int i=1;i<=m;i++)  
  31. //        {  
  32. //            for(int j=1;j<m;j++)  
  33. //                printf("%d ", a[i][j]);  
  34. //            printf("%d\n", a[i][m]);  
  35. //        }  
  36.         int min=0x3f3f3f3f;  
  37.         for(int i=1;i<=m;i++)  //1到m为猪圈编号
  38.         {  
  39.             int sum=0;  
  40.             for(int j=1;j<=n;j++)  
  41.                 sum+=a[i][b[j]];  
  42.             if(sum<min) min=sum; //sum记录在第i个猪圈投食的话所有的猪走的路程和
  43.         }  
  44.         printf("%d\n", min);  //输出最小值
  45.   
  46.     }  
  47.     return 0;  
  48. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值