hdu Jungle Roads

来源:互联网 发布:mac os10.6.8光盘镜像 编辑:程序博客网 时间:2024/05/16 08:51

这一题目,主要是如何建图。

也是用模板。不多说。

 

#include<iostream>#include<cstring>using namespace std;#define maxn 1000 + 10#define INF 100000000int net[maxn][maxn],lowcost[maxn],vis[maxn];int n;int prim(){    int j,k,mins,yes;    int sum=0;    memset(vis,0,sizeof(vis));    vis[1]=1;    for(;;)    {        mins=INF;        yes=-1;        for(j=1;j<=n;j++)        {            if(lowcost[j] < mins && !vis[j])            {                mins=lowcost[j];                yes=1;                k=j;            }        }        if(yes==-1) break;        vis[k]=1;        sum+=mins;        for(j=1;j<=n;j++)            if(lowcost[j]>net[k][j] && !vis[j]) lowcost[j]=net[k][j];    }    return sum;}int main(){    int i,j;    char first,next;    int num,costs;    while(cin>>n && n)    {        for(i=1;i<=n;i++)            for(j=1;j<=n;j++) net[i][j]=INF,net[j][i]=INF;        for(i=1;i<n;i++)        {            cin>>first>>num;            for(j=0;j<num;j++)            {                cin>>next>>costs;                net[first-'A'+1][next-'A'+1] = costs;                net[next-'A'+1][first-'A'+1] = costs;            }        }        for(i=1;i<=n;i++) lowcost[i]=net[1][i];        cout<<prim()<<endl;    }    return 0;}


 

原创粉丝点击