暑假集训 8.18 数据结构实验之图论六:村村通公路 (最小生成树)

原创 2016年08月18日 21:34:52

数据结构实验之图论六:村村通公路

Time Limit: 1000MS Memory limit: 65536K

题目描述

当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所需要的最低成本。

输入

连续多组数据输入,每组数据包括村落数目N(N <= 1000)和可供选择的道路数目M(M <= 3000),随后M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个村庄的编号和修建该道路的预算成本,村庄从1~N编号。 

输出

输出使每个村庄都有公路连通所需要的最低成本,如果输入数据不能使所有村庄畅通,则输出-1,表示有些村庄之间没有路连通。 

示例输入

5 8
1 2 12
1 3 9
1 4 11
1 5 3
2 3 6
2 4 9
3 4 4
4 5 6

示例输出

19


代码更新 2016.11.25

由于数据结构测试 重新写了代码 不需要并查集了!!!

#include <iostream>
#include <cstring>
using namespace std;

const int inf=1000010;

int mp[1011][1011]; ///边权
bool v[1011]; ///是否进入mst
int dis[1011]; ///到树的距离

int n,m;
int mstlen,flag;

void prim()
{
    int j,i,num=0;
    memset(v,0,sizeof(v));

    mstlen=0;
    v[1]=1;

    for (i=1; i<=n; i++)
    {
        dis[i]=mp[1][i];
    }

    int d,pos;
    for(i=1; i<=n-1; i++)
    {
        d=inf;
        for (j=1; j<=n; j++)
        {
            if (v[j] == 0 && dis[j] < d)
            {
                d=dis[j];
                pos=j;
            }
        }

        if (d==inf) /// 可以用来判断是否联通 找不到点而且循环未结束 则不联通了
        {
            flag=0;
            break;
        }

        mstlen+=d;
        v[pos]=1;
        dis[pos]=0;

        for (j=1; j<=n; j++) ///更新最小距离
        {
            dis[j]=min(dis[j],mp[pos][j]);
        }
    }
}

int main()
{
    int i,j,v,u,key;

    while (cin>>n>>m)
    {
        flag=1;
        memset(mp,inf,sizeof(mp));

        for (i=1; i<=m; i++)
        {
            cin>>u>>v>>key;
            if (mp[u][v] > key) /// 是否重边
            {
                mp[u][v]=mp[v][u]=key;
            }
        }

        prim();

        if (flag==1)
        {
            cout<<mstlen<<endl;
        }
        else
        {
            cout<<-1<<endl;
        }
    }
    return 0;
}


版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

相关文章推荐

SDUT OJ 3362 数据结构实验之图论六:村村通公路

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory limit: 65536K 题目描述 当前农村公路建设正如火如荼的展开,某乡...

数据结构实验之图论六:村村通公路

Problem Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你...

数据结构实验之图论六:村村通公路

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 当前农村公路建设正如火如荼的展...

数据结构实验之图论六:村村通公路

Think: 最小生成树的 题目, 所以 直接用 Prim算法 ; WA了22发 TAT 感觉萌萌哒~~~~ 思路: Prim 模板 直接 套用就可以了Problem Description...

数据结构实验之图论六:村村通公路 prim算法

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descrip...

SDUTACM 数据结构实验之图论六:村村通公路

题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使...

数据结构实验之图论六:村村通公路

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript...

数据结构实验之图论六:村村通公路

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri...

数据结构实验之图论六:村村通公路

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript...

数据结构实验之图论六:村村通公路

Problem Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)