Hoj 1632 Jungle Roads

来源:互联网 发布:js获取元素高度 编辑:程序博客网 时间:2024/06/14 09:16

最小生成树。

算法:Prim。

题目连接:http://acm.hit.edu.cn/hoj/problem/view?id=1632


#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#include <math.h>#include <algorithm>using namespace std;int map[28][28];int dist[28];int visited[28];int main(){#ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);#endif    int n;    while(scanf(" %d",&n)!=EOF && n!=0)    {        char c;        int d;        char c1;        int d1;        memset(map,0x7f,sizeof(map));        for(int i=0; i<28; i++)        {            map[i][i] = 0;        }        for(int i=0; i<n-1; i++)        {            scanf(" %c %d",&c,&d);            for(int j=0; j<d; j++)            {                scanf(" %c %d",&c1,&d1);                map[c-'A'][c1-'A'] = map[c1-'A'][c-'A'] = d1;            }        }        memset(dist,0x7f,sizeof(dist));        memset(visited,0,sizeof(visited));        dist[0] = 0;        int sum = 0;        for(int i=0; i<n; i++)        {            int min = 0x7f;            int k = 0;            for(int j=0; j<n; j++)            {                if(visited[j] == 0 && dist[j]<min)                {                    min = dist[j];                    k = j;                }            }            visited[k] = 1;            sum += min;            for(int j=0; j<n; j++)            {                if(dist[j] > map[k][j])                {                    dist[j] = map[k][j];                }            }        }        printf("%d\n",sum);    }    return 0;}


原创粉丝点击