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. Android Studio 使用Intent

    1.显式Intent Intent intent=new Intent(yzj.this,MainActivity.class);//当前活动的实例,要去的实例 startActivity(inten ...

  2. Centos7.6 在LNMP上部署禅道

    一.下载禅道,并传到你的服务器上面的/opt文件下. http://dl.cnezsoft.com/zentao/7.3/ZenTaoPMS.7.3.stable.zbox_64.tar.gz 二.使 ...

  3. ECharts中color : function的用法(转)

    ECharts图表实战经验1:如何设置图表同序列不同数据点的独立颜色值   最近有不少朋友在追问这样一个问题:我单序列的柱状图,我想让每一个根柱子的颜色都不一样,应该如何做? 针对这个问题,其实我只想 ...

  4. c# chart控件柱状图,改变柱子宽度

    让柱状图紧挨 改变柱状图宽度 chart1.Series[0]["PointWidth"] = "2";

  5. 【Java每日一题】20170321

    20170320问题解析请点击今日问题下方的“[Java每日一题]20170321”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  6. elementUI vue upload完整示例

    elementUI 和vue 还有axios +java的完整示例, 代码敲了很久, 累死了, 以后用就直接复制了 ,很值吧!!! 1.html <!DOCTYPE html> <h ...

  7. [工具配置]requirejs 多页面,多入口js文件打包总结

    需要明确以下几点: 1.本地前端调试代码肯定是调用原始的路径以及代码,但是线上运行的肯定是通过打包后的另一个路径,这儿就是生成的dist文件夹了. 2.requirejs的引入,线上跟线下的路径怎么控 ...

  8. CSS超全笔记(适合新手入门)

    CSS CSS初识 CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等 ...

  9. iPhone X手机投屏电脑无线连接教程

    iPhone X手机是一款非常有气场的手机,独特的设计,展现手机的独特魅力,手机外观让人一眼就爱上,手感也是超级的舒适,真的是堪称完美,但是iPhone X手机投屏电脑怎么无线连接呢? 使用工具: 电 ...

  10. PlugNT CMS v4.6.3 调用文章上一页和下一页及点击数加1

    using System; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebContr ...