题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1863

题目大意:

中文题,求MST权值,如果不连通,输出?

解题思路:

这道题帮我找出了之前模板中的一点小问题。

原来prim模板是迭代n次,实际是只需要迭代n-1次就求出了MST,由于有一个条件判断,所以迭代n次也无所谓。这道题在prim模板上加上判断连通的操作,如果某一次找不到为加入MST的最小边,说明图不连通。所以此处只能迭代n-1次,多迭代的话,会造成错误判断。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int lowcost[maxn], mst[maxn];
int n, m;
ll prim(int u)
{
ll ans = ;
for(int i = ; i <= n; i++)
{
lowcost[i] = Map[u][i];
mst[i] = u;
}
mst[u] = -;
for(int i = ; i < n; i++)
{
int minn = INF;
int v = -;
//寻找lowcost数组里面的未加入mst的最小值
for(int j = ; j <= n; j++)
{
if(mst[j] != - && lowcost[j] < minn)
{
v = j;
minn = lowcost[j];
}
}
if(v != -)
{
mst[v] = -;
ans += lowcost[v];
for(int j = ; j <= n; j++)
{
if(mst[j] != - && lowcost[j] > Map[v][j])
{
lowcost[j] = Map[v][j];
mst[j] = v;
}
}
}
else return ;//没有找到,说明不连通
}
return ans;
}
int main()
{
while(scanf("%d%d", &m, &n) != EOF && m)
{
int u, v, w;
memset(Map, INF, sizeof(Map));
memset(lowcost, , sizeof(lowcost));
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
Map[u][v] = Map[v][u] = w;
}
ll ans = prim();
if(ans)cout<<ans<<endl;
else cout<<"?"<<endl;
}
return ;
}

hdu1863 畅通工程---MST&连通的更多相关文章

  1. hdu 1863 - 畅通工程(MST)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. HDU1863 畅通工程---(最小生成树)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 最小生成树算法 prim kruskal两种算法实现 HDU-1863 畅通工程

    最小生成树 通俗解释:一个连通图,可将这个连通图删减任意条边,仍然保持连通图的状态并且所有边权值加起来的总和使其达到最小.这就是最小生成树 可以参考下图,便于理解 原来的图: 最小生成树(蓝色线): ...

  4. hdu 1233 - 还是畅通工程(MST)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. 还是畅通工程(MST)

    还是畅通工程 Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  6. hdu1863 畅通工程(最小生成树之prim)

    Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可 ...

  7. Kruskal算法-HDU1863畅通工程

    链接 [http://acm.hdu.edu.cn/showproblem.php?pid=1863] 题意 Problem Description 省政府"畅通工程"的目标是使全 ...

  8. HDU1863 畅通工程 2017-04-12 19:25 59人阅读 评论(0) 收藏

    畅通工程 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  9. hdu1863畅通工程

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. cf837D(01背包)

    题目链接: http://codeforces.com/contest/837/problem/D 题意: 给出 n 个数, 从中选出 k 个数使得这 k 个数的乘积末尾 0 最多 . 思路: 先记录 ...

  2. 数组API(2)

    ES5中数组新增API: 1. indexOf 作用:检测当前数据是否在数组中存在: 特点:如果存在返回相对应的下标,如果不存在则返回-1: 如果数组中存在多个需要判断的这个数据,则返回最近的这个数据 ...

  3. ligerUI弹出框

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Taran 缩点【bzoj1529】[POI2005]ska Piggy banks

    [bzoj1529][POI2005]ska Piggy banks Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个 ...

  5. List、Set

    List.Set List.Set List.Set List.Set List.Set List.Set List.Set

  6. 关于dijkstra求最短路(模板)

    嗯....   dijkstra是求最短路的一种算法(废话,思维含量较低,   并且时间复杂度较为稳定,为O(n^2),   但是注意:!!!!         不能处理边权为负的情况(但SPFA可以 ...

  7. Travelling (三进制+状压dp)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ ,f= ...

  8. js unicode

    参考 http://www.ruanyifeng.com/blog/2014/12/unicode.html

  9. PAT甲级——1096 Consecutive Factors (数学题)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/91349859 1096 Consecutive Factors  ...

  10. BufferedReader readLine

    import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils; In ...