最小生成树 A - 畅通工程
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 - 畅通工程的更多相关文章
- (最小生成树) 畅通工程再续 -- HDU --1875
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1875 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 1233 (prim,最小生成树) 还是畅通工程
还是畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- ACM: 继续畅通工程-并查集-最小生成树-解题报告
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/M Description 相信大家都听说一个"百岛湖&q ...
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- prime算法求最小生成树(畅通工程再续)
连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 ...
- HDU1879--继续畅通工程(最小生成树)
Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计 ...
随机推荐
- 博客使用base64编码图片测试
为了解决发博客时需要先要上传,所以查了一下这个方法 1.把本地图片转为base64编码的字符串, 网上有很多提供这个功能的网站,转换后像这样 data:image/jpeg;base64,/9j/4A ...
- Python网络编程Socket之协程
一.服务端 __author__ = "Jent Zhang" import socket import gevent from gevent import monkey monk ...
- Asp.Net MVC中Action跳转(转载)
首先action的跳转大致归类: 1跳转到与当前同一控制器内的action和不同控制器内的action. 2带有参数的action跳转和不带参数的action跳转. 3跳转到指定视图,不经过Contr ...
- JSJ—案例谈面向对象
有人告诉我那里遍地都是对象——我们把所有的程序代码放在main()里面,事实上,那根本就不是面向对象的做法,在Java的面向对象中,我们也会看到类和对象的不同,以及对象是如何让你的生活更美好(至少程序 ...
- 异常: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configurat
异常: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. ...
- java使用POI将数据导出放入Excel
本文主要是将数据库取出的数据按照自定义的行列格式导出到excel中,POI则是实现我们需求所用到的技术. POI介绍 使用spring boot导入相关依赖 获取数据(自行处理) 完整代码实例:创建e ...
- 详解bootstrap-fileinput文件上传控件的亲身实践
经理让我帮服务器开发人员开发一个上传文件功能界面,我就想着以前使用过bootstrap-fileinput插件进行文件上传,很不错.赶紧就撸起来了. 1.下载压缩包.插件地址https://githu ...
- ajax知识点
什么是AJAX? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...
- 2018-09-24 Java源码英翻中网页演示
在线演示地址: 源代码翻译 两部分如下. 独立的Java代码翻译库 续前文代码翻译尝试-使用Roaster解析和生成Java源码 源码库: program-in-chinese/java_code_t ...
- 一个简单的scrollTop动画的方法
var autoScrollTop = function (param) { var delay = param.scrollDom.height() * 20; param.dom.animate( ...