HDU 1301 (prim )


http://acm.hdu.edu.cn/showproblem.php?pid=1301

Lagrishan热带岛屿的首领有一个问题。几年前,一批外国援助资金花在了村庄之间的额外道路上。但是丛林无情地超越了道路,
所以大型的公路网络太昂贵,无法维持。长老会必须停止维护一些道路。上面左边的地图显示了现在使用的所有道路和每月AACMS的维护费用。
当然,需要有办法在所有的村庄之间保持道路,即使路线没有以前那么短。首席长老想告诉长老会,
他们每月能在AACMS中花费最少的钱来维持连接所有村庄的道路。在上面的地图上,村庄被标记为I。
右边的地图显示的道路,可以保持最便宜,每月216 AACMS。你的任务是编写一个程序来解决这些问题。
输入由一到100个数据集组成,后面的最后一行仅包含0个。每一个数据集都只包含一个N,
这是村庄的数目,1<n<27,村庄被字母首字母N标记,大写。每个数据集以N-1线完成,
以字母顺序从村庄标签开始。最后一个村庄没有排。一个村庄的每一条线都是从村庄标签开始的,
后面跟着一个数字,K,从这个村庄到村庄的道路,后来在字母表中加上标签。如果k大于0,则该行继续使用k个道路中的每个数据
。每条道路的数据是道路的另一端的村庄标签,其次是AACMS道路的每月维护成本。
维护成本将是小于100的正整数。行中的所有数据字段由单个空白分隔。路网总是允许所有村庄之间的旅行。
这个网络永远不会有超过75条道路。没有村庄会有超过15条道路通往其他村庄(在字母表之前或之后)。
在下面的样本输入中,第一个数据集与上面的映射一致
每个数据线的输出是一个整数:每个月AACMS的最小成本来维持连接所有村庄的道路系统。
警告:检查每一组可能道路的强力解决方案不会在一分钟的时间内完成。





#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=30;
int n;
int a[maxn][maxn];
int vis[maxn];
int dis[maxn];
int prim()
{
    int temp,conut =0;
    for(int i=1; i<=n; i++)
    {
        dis[i]=a[1][i];
    }
    memset(vis,0,sizeof(vis));
    vis[1]=1;
    for(int i=1; i<n; i++)//关键点注意!!!!
    {
        int minn=inf;
        for(int j=1; j<=n; j++)
        {
            if(!vis[j]&&dis[j]<minn)
                minn=dis[temp=j];
        }
        if(minn==inf)
            return -1;
        vis[temp]=1;
        conut+=dis[temp];
        for(int j=1; j<=n; j++)
        {
            if(dis[j]>a[temp][j]&&!vis[j])
                dis[j]=a[temp][j];
        }
    }
    return conut;
}
int main()
{
    int i,j,k,ans,cost;
    char str;
    while(cin>>n&&n!=0)
    {
        getchar();
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                a[i][j]=(i==j?0:inf);
        for(i=1; i<n; i++)
        {
            cin>>str>>k;
            getchar();
            while(k--)
            {
                cin>>str>>cost;
                getchar();
                j=str-'A'+1;
                a[i][j]=a[j][i]=cost;
            }
        }
        ans=prim();
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/beposit/article/details/80565313
今日推荐