dalao视频:https://www.bilibili.com/video/av4768483

https://www.bilibili.com/video/av4768483?p=2

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N

行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

Output对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

Sample Input

3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100

Sample Output

3
?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=111;
int n,m;
struct node
{
int from,to,cost;
}exa[maxn]; int father[maxn]; void init()
{
for(int i=1;i<=n;i++) father[i]=i;
} int findx(int x)
{
return father[x]==x?x:father[x]=findx(father[x]);
} void unite(int a,int b)
{
int x=findx(a);
int y=findx(b);
if(x==y) return ;
father[x]=y;
} bool same(int x,int y)
{
return findx(x)==findx(y);
} bool cmp(const node &a,const node &b)
{
return a.cost<b.cost;
} ll kruskal()
{
ll res=0;
sort(exa+1,exa+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(same(exa[i].from,exa[i].to)) continue;
unite(exa[i].from,exa[i].to);
res+=exa[i].cost;
}
return res;
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&n)
{
init();
for(int i=1;i<=n;i++)
scanf("%d%d%d",&exa[i].from,&exa[i].to,&exa[i].cost);
ll res=kruskal();
for(int i=2;i<=m;i++)//判断是不是连通
{
if(!same(1,i)) res=-1;
}
if(res==-1) printf("?\n");
else printf("%I64d\n",res);
}
return 0;
}

  

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn=111;
int n,m;
struct node
{
int to;
ll cost;
node(int to,ll cost) : to(to),cost(cost){}
bool operator<(const node& a)const{
return a.cost<cost;
}
}; std::priority_queue<node>que;
std::vector<node> g[maxn]; bool vis[maxn]; ll prim()
{
ll res=0;
vis[1]=1;
for(int i=0;i<g[1].size();i++) que.push(g[1][i]);
while(que.size())
{
node e=que.top();que.pop();
if(vis[e.to]) continue;
vis[e.to]=1;
res+=e.cost;
for(int i=0;i<g[e.to].size();i++) que.push(g[e.to][i]);
}
return res;
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&n)
{
for(int i=0;i<=m;i++) g[i].clear();
while(que.size()) que.pop();
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
int u,v;
ll cost;
scanf("%d%d%I64d",&u,&v,&cost);
g[u].push_back(node(v,cost));
g[v].push_back(node(u,cost));
}
ll res=prim();
for(int i=1;i<=m;i++) if(!vis[i]) res=-1;
if(res==-1) printf("?\n");
else printf("%I64d\n",res);
}
return 0;
}

  

最小生成树 A - 畅通工程的更多相关文章

  1. (最小生成树) 畅通工程再续 -- HDU --1875

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1875 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  2. hdu 1233 (prim,最小生成树) 还是畅通工程

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

  3. [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...

  4. HDU-1233 还是畅通工程 (prim 算法求最小生成树)

    prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  5. ACM: 继续畅通工程-并查集-最小生成树-解题报告

    继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...

  6. HDU 1875 畅通工程再续 (最小生成树)

    畅通工程再续 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/M Description 相信大家都听说一个"百岛湖&q ...

  7. HDU1875——畅通工程再续(最小生成树:Kruskal算法)

    畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...

  8. prime算法求最小生成树(畅通工程再续)

    连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 ...

  9. HDU1879--继续畅通工程(最小生成树)

    Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计 ...

随机推荐

  1. 【 js 工具 】如何在Github Pages搭建自己写的页面?

    最近发现 github 改版了,已没有像原来的 Launch automatic page generator 这样的按钮等,所以我对我的文章也进行了修正,对于新版来说,步骤更加简单了.欢迎享用. - ...

  2. Git学习(一)

    版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制. 一.集中式版本控制系统 v.s ...

  3. C#时间、日期 的操作

    原文地址:http://zhidao.baidu.com/link?url=q-0No1LWfdyqQKFBg8RN5h0K-X0VygSbFI4sR8lBPwDExkIIzXQivyMKqX7V1y ...

  4. H5和PC实现点击复制当前文字的功能,兼容ios,安卓

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Dynamics 365-部分用户访问环境缓慢

    链接来自MS MVP 罗勇大神的Dynamics 365中部分账号使用系统明显缓慢怎么办?先这么干! 之前项目中也遇到过客户部分账户访问环境缓慢的问题,在此做个记录,等再碰到了,以此思路进行尝试

  6. linux连接数过多,导致ping包丢包的问题解析

    1.首先要明确,无论是tcp, udp, raw等这些都要占用socket, 那么就涉及到连接数的问题. 所以,linux连接数的问题,不仅仅是tcp连接数. 2.查看当前系统中所有的socket 连 ...

  7. 让bind函数支持IE8浏览器的方法

    bind函数在IE8下是不支持的,只需要在你的js文件中加入如下代码就可以支持IE8 //让bind函数支持IE8 if (!Function.prototype.bind) { Function.p ...

  8. Android Demo Android ActionBarCompat-ListPopupMenu

    示例显示如何使用v7 appcompat库中的PopupMenu显示弹出式菜单.主界面使用V4支持库的ListFragment显示数据列表,当点击列表子项时,在子项下方弹出下拉菜单,并通过设置setO ...

  9. [20190319]shared pool latch与library cache latch的简单探究.txt

    [20190319]shared pool latch与library cache latch的简单探究.txt --//昨天看Oracle DBA手记3:数据库性能优化与内部原理解析.pdf 电子书 ...

  10. SQL server 2012 数据库日志缓存过大

    由于我公司的每日数据录入量较多,数据库日志与日俱增,前两天就出现了,因为数据库日志太大导致了 服务器磁盘空间不足,于是我上网查了一下,终于找到了一个数据库日志文件压缩的方法 原文出处:http://b ...