SDUT 3362 村村通公路

来源:互联网 发布:信和大金融网络贷款 编辑:程序博客网 时间:2024/04/27 17:14

点击打开题目链接

#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;int dis[1010];int Edge[1010][1010];bool visited[1010];int n, m;int Prim(){    memset(visited, false, sizeof(visited));    for(int i = 1; i <= n; i ++)    {        dis[i] = Edge[1][i];    }    int sum = 0;    visited[1] = true;    for(int i = 1; i < n; i++)    {        long long int  m = INF;        int pos;        for(int j = 1; j <= n; j++)        {            if(!visited[j] && dis[j] < m)            {                m = dis[pos = j];            }        }        visited[pos] = true;        sum += dis[pos];        if(m == INF)        {            return sum = -1;        }        for(int j = 1; j <= n; j ++)        {            if(!visited[j] && dis[j] > Edge[pos][j])            {                dis[j] = Edge[pos][j];            }        }    }    return sum;}int main(){    while(cin >> n >> m)    {        for(int i = 1; i <= n; i++)        {            for(int j = 1; j <= n; j++)                (i == j)?Edge[i][j]=0:Edge[i][j] = INF;        }        int u, v, w;        while(m --)        {            cin >> u >> v >> w;            if(Edge[u][v] > w)            {            Edge[u][v] = Edge[v][u] = w;            }        }        cout << Prim() << endl;    }    return 0;}


0 0
原创粉丝点击