HDU-1301-Jungle Roads

来源:互联网 发布:数据库unique 编辑:程序博客网 时间:2024/05/01 01:53

ACM模版

描述

描述

题解

模版题,就是英文有些长了,真咋呼人,看了好久没看懂……最小生成树。

代码

#include <iostream>#include <cstring>#define mem(a, b) memset(a, b, sizeof(a))using namespace std;/* * Prim求MST * 耗费矩阵cost[][],初始化为INF,标号从0开始,0 ~ n-1 * 返回最小生成树的权值,返回-1表示原图不连通 */const int INF = 0x3f3f3f3f;const int MAXN = 27;bool vis[MAXN];int lowc[MAXN];int cost[MAXN][MAXN];//  修正cost(添加边)void updata(int x, int y, int v){    cost[x - 1][y - 1] = v;    cost[y - 1][x - 1] = v;    return ;}int Prim(int cost[][MAXN], int n)   //  0 ~ n - 1{    int ans = 0;    memset(vis, false, sizeof(vis));    vis[0] = true;    for (int i = 1; i < n; i++)    {        lowc[i] = cost[0][i];    }    for (int i = 1; i < n; i++)    {        int minc = INF;        int p = -1;        for (int j = 0; j < n; j++)        {            if (!vis[j] && minc > lowc[j])            {                minc = lowc[j];                p = j;            }        }        if (minc == INF)        {            return -1;  //  原图不连通        }        ans += minc;        vis[p] = true;        for (int j = 0; j < n; j++)        {            if (!vis[j] && lowc[j] > cost[p][j])            {                lowc[j] = cost[p][j];            }        }    }    return ans;}int main(int argc, const char * argv[]){    int N;    char village[2];    //  字符串读入防止缓冲区出问题    int num;    int len;    while (cin >> N && N != 0)    {        mem(cost, 0x3f);        mem(vis, 0);        for (int i = 1; i < N; i++)        {            scanf("%s%d", village, &num);            int temp = village[0] - 'A' + 1;//            cout << temp << '\n';            for (int j = 0; j < num; j++)            {                scanf("%s%d", village, &len);                updata(temp, village[0] - 'A' + 1, len);            }        }        int ans = Prim(cost, N);        cout << ans << '\n';    }    return 0;}

参考

《最小生成树(森林)》

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果导航卡死怎么办 没有上传的发票怎么办 发票显示未上传怎么办 发票未上传怎么办 影响 公务员国考补录不合格的怎么办 车辆转入退档怎么办 校园网总是断网怎么办 校园网经常断网怎么办 身份证号姓名电话号码泄露怎么办 中国邮政银行短信通知怎么办 中通递送不到怎么办 智齿碎了一半怎么办 驾照扣50分怎么办 办不了租赁合同怎么办 收到佰仟律师函怎么办 佰仟律师打电话怎么办 右转车道右方路禁行怎么办 收费站没带现金怎么办 过收费站没有现金怎么办 高速收费站没有现金怎么办 过收费站没现金怎么办 查社保忘记密码怎么办 医保密码忘记了怎么办 买房房东不过户怎么办 转户口金牛区怎么办 高中办休学手续怎么办 电动车灯壳发黄怎么办 买二手车上当了怎么办 成都社保卡遗失怎么办 成都个人怎么办健康证 成都健康证怎么办周末 扶贫办 2020年后怎么办 学历认证通不过怎么办 中考落榜后该怎么办 高考没有填志愿怎么办 上海怎么办人户分离 四级考试被禁考怎么办 高考志愿没填怎么办 腓总神经损伤怎么办 怀孕了没有医保怎么办 卫生间便池堵了怎么办