2007浙大复试上机考试题目5--畅通工程

--------------------------------------------------------------------------------

题目要求:

省政府畅通工程的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

具体的输入输出格式规定如下:

 

输入格式:测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N

行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1M编号。当N0时,全部输入结束,相应的结果不要输出。

 

输出格式:对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”

 

输入样例:

 

3 3

1 2 1

1 3 2

2 3 4

1 3

2 3 2

0 100

 

输出样例:

 

3

?

--------------------------------------------------------------------------

#include <iostream>
using namespace std;

int main()
{
    
int n,m,aa[110][110],v[110],min[110],ret,i,j,k,inf=(100<<16)+100;
    
while(cin>>m>>n&&m){
        memset(aa,
100,sizeof(aa));
        
while(m--){
            cin
>>i>>j>>k;
            aa[j
-1][i-1]=aa[i-1][j-1]=k;
        }

        
for(ret=i=0;i<n;i++) min[i]=inf,v[i]=0;
        
for(min[j=0]=0;j<n;j++){
             
for(k=-1,i=0;i<n;i++)
                 
if(!v[i]&&(k==-1||min[i]<min[k]))k=i;
                 
for(v[k]=1,ret+=min[k],i=0;i<n;i++)
                     
if(!v[i]&&aa[k][i]<min[i])
                         min[i]
=aa[k][i];
        }

        
if(ret<inf)cout<<ret<<endl;
        
else cout<<"?"<<endl;
    }

    
return 0;
}



posted on   Phinecos(洞庭散人)  阅读(1213)  评论(3编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示