题解报告:hdu 1863 畅通工程
#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int m,n,a,b,c,mincost[],cost[][];
bool vis[];
void Prim(){
for(int i=;i<=n;++i)
mincost[i]=cost[][i];
mincost[]=;vis[]=true;
int res=;
for(int i=;i<n;++i){//m-1个节点
int k=-;
for(int j=;j<=n;++j)//这里更新一下获得的新发现,循环到第二次时会默认地把mincost[2]当作最小值,然后与剩下的元素比较,找到最小
if(!vis[j] && (k==-||mincost[k]>mincost[j]))k=j;
if(k==-)break;
if(mincost[k]==INF)break;//如果此时的最小值还是INF,说明统计数据不足,直接退出
vis[k]=true;
res+=mincost[k];
for(int j=;j<=n;++j)
if(!vis[j])mincost[j]=min(mincost[j],cost[k][j]);
}
bool flag=false;//标记是否还有未访问
for(int i=;i<=n;++i)
if(!vis[i]){flag=true;break;}//如果还有未被访问,说明统计数据不全,输出'?'
if(flag)cout<<'?'<<endl;
else cout<<res<<endl;
}
int main()
{
while(cin>>m>>n && m){
memset(vis,false,sizeof(vis));
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
cost[i][j]=(i==j?:INF);
for(int i=;i<=m;++i){
cin>>a>>b>>c;
cost[a][b]=cost[b][a]=c;
}
Prim();
}
return ;
}
AC之Kruskal算法(并查集):判断数据不全的依据是如果所有节点的根节点不一样,即不在同一个集合时输出'?',否则输出最小代价即可。
#include<bits/stdc++.h>
using namespace std;
int m,n,father[],sum;
struct edge{int u,v,cost;}es[];//可能有n*(n-1)/2条边,因为这是无向有权图,此时开5000长度已经够了
bool cmp(const edge& e1,const edge& e2){//引用,减少拷贝所花时间
return e1.cost<e2.cost;
}
void init_union_find(){//将每个节点当作根节点
for(int i=;i<=n;++i)father[i]=i;
}
int find_father(int x){//递归查找根节点
if(father[x]==x)return x;
else return father[x]=find_father(father[x]);
}
void unite(int x,int y,int z){
x=find_father(x);
y=find_father(y);
if(x!=y){//如果边的两端点的根节点不相同,即分别为非连通图,则可以归并
sum+=z;//加上最小权值
father[x]=y;
}
}
int main()
{
while(cin>>m>>n && m){
for(int i=;i<=m;++i)
scanf("%d %d %d",&es[i].u,&es[i].v,&es[i].cost);
sort(es+,es+m+,cmp);//权值按从小到大排序
sum=;init_union_find();//初始化
for(int i=;i<=m;++i)
unite(es[i].u,es[i].v,es[i].cost);
bool flag=false;
for(int i=;i<=n;++i)//判断是否在同一个集合中
if(find_father()!=find_father(i)){flag=true;break;}
if(flag)cout<<'?'<<endl;
else printf("%d\n",sum);
}
return ;
}
题解报告:hdu 1863 畅通工程的更多相关文章
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...
- hdu 1863 - 畅通工程(MST)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU 1863 畅通工程(Prim算法求解MST)
题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...
- HDU 1863 畅通工程 克鲁斯卡尔算法
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程(Kruskal)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程 -Kruskal模版
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- save density, pressure, velocity, temperature contour at one slice in xy plane-- paraview with batch Python scripts
#### import the simple module from the paraviewfrom paraview.simple import *#### disable automatic c ...
- Maven_运行时环境
首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...
- 关于字符串不为空 错误:s!=null
错误:s!=null 正确:StringUtils.isNotBlank(s); public static boolean isBlank(CharSequence cs) { int strLen ...
- 《Noisy Activation Function》噪声激活函数(一)
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51736830 Noisy Activa ...
- MySql 执行计划解读
说明 解读执行计划l对于我们日常工作中慢sql的分析和调优有很大帮助,同时在解读的过程中也能知道如何规避慢sql 建议需要了解join匹配原理的知识:https://www.cnblogs.com/L ...
- Ubuntu 16.04下使用gcc输出汇编的.0文件为可执行文件时出现:`_start'被多次定义
错误如下: `_start'被多次定义 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:(.text+0x0):第一次 ...
- 2 instances of postgresql but I really need one [closed]
I happen to have 2 installed instances of postgresql at my machine: 9.1 and 9.2: sudo service postgr ...
- access-list/eigrp等 反掩码计算
access-list/eigrp等 反掩码计算 原则:地址部分,相同的照写,不同的写"0" 反掩码部分,相同的写"0",不同的写"1&quo ...
- Python实例--C#执行Python脚本,传参
# -*- coding: utf-8 -*- # 第一行的目的,是为了让代码里面,可以有中文注释信息. (否则要运行报错) # 这个 Python 脚本, 用于被 C# 来调用. # 简单测试 He ...
- Leetcode题解(5):L58/Length of Last Word
L58: Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space cha ...