HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)
畅通工程
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 35957 Accepted Submission(s): 15971
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
?
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
int d[];
struct node
{
int v;
int c;
int nxt;
}e[];
int head[];
int cnt=;
bool book[];
void add(int u,int v,int c)
{
e[cnt].c=c;
e[cnt].v=v;
e[cnt].nxt=head[u];
head[u]=cnt++;
}
int main()
{
int n,m;
while(cin>>m>>n)
{
if(m==) break;
cnt=;
memset(d,inf,sizeof(d));
memset(head,-,sizeof(head));
memset(book,,sizeof(book));
for(int i=;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
for(int i=head[];i!=-;i=e[i].nxt)
{
if(d[e[i].v]>e[i].c)
{
d[e[i].v]=e[i].c;
}
}
d[]=;
book[]=;
bool f=;
int sum=;
for(int i=;i<=n-;i++)
{
int k=-;
int min=inf;
for(int j=;j<=n;j++)
{
if(!book[j]&&min>d[j])
{
min=d[j];
k=j;
}
}
if(k==-)
{
f=;
break;
}
book[k]=;
sum+=d[k];
for(int j=head[k];j!=-;j=e[j].nxt )
{
int x=e[j].v;
int c=e[j].c;
if(!book[x]&&d[x]>c)
{
d[x]=c;
}
}
}
if(!f) cout<<"?"<<endl;
else cout<<sum<<endl;
}
return ;
}
kruskal
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
int pra[];
struct node
{
int u,v,c;
}e[];
bool cmp(node x,node y)
{
return x.c<y.c;
}
int find(int x)
{
if(pra[x]==x) return x;
else return pra[x]=find(pra[x]);
}
void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return;
else
{
pra[x]=y;
}
}
int main()
{
int n,m;
while(cin>>m>>n)
{
if(m==) break;
for(int i=;i<=n;i++) pra[i]=i;
for(int i=;i<=m;i++)
{
cin>>e[i].u>>e[i].v>>e[i].c;
}
sort(e+,e+m+,cmp);
int sum=;
int k=;
for(int i=;i<=m;i++)
{
int x=e[i].u;x=find(x);
int y=e[i].v;y=find(y);
if(x!=y)
{
unite(x,y);
k++;
sum+=e[i].c;
}
if(k==n-) break;
}
if(k==n-) cout<<sum<<endl;
else cout<<"?"<<endl;
}
return ;
}
HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)的更多相关文章
- hdu 1863 畅通工程 (prim)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- HDU 1863 畅通工程(Prim算法求解MST)
题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...
- HDU 1863 畅通工程 -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 Submi ...
- hdu 1863 畅通工程 (并查集 、 kruskal)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1863 畅通工程(Kruskal)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- <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 ...
随机推荐
- 用java.lang.Math.random()语句,随机输出{size:自定义参数}个数不重复并且按顺序从小到大排列(冒泡排序)
package com.test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lan ...
- [转载]allowTransparency属性
原文地址:allowTransparency属性作者:惊寒唱晚 IE5.5开始支持浮动框架的内容透明.如果想要为浮动框架定义透明内容,则必须满足下列条件. 1.与 iframe 元素一起使用的 all ...
- java基础9(IO流)-File类
File类 File:文件和目录路径名的抽象表示形式.即java中把文件或者目录都封装成File对象 代码练习1 import java.io.File; public class FileDemo1 ...
- MAC 系列 之XCode7.1 + HBuilder MUI 离线打包 ipa 上次application leader 问题:ERROR ITMS - 90032
90032 解决方法:
- Haproxy与OpenStack-API安全
转 http://wsfdl.com/devops/2014/12/24/Haproxy%E4%B8%8EOpenStack-API%E5%AE%89%E5%85%A8.html Haproxy 作为 ...
- Servlet源码级别进行详解
1.首先我们先看看Servlet的类结构图,然后再分别介绍其中的接口方法 由上图可以看到,Servlet和ServletConfig都是顶层接口类,而GenericServlet实现了这两个顶层类,然 ...
- review09
String类在java.lang包中,由于java.lang包中的类被默认引入,所以可以直接使用String类.String对象的创建可以直接使用带字符串参数的构造方法 String s = new ...
- 英语发音规则---U字母-[复习中]
英语发音规则---U字母 一.总结 一句话总结:(注:本文所有//的音标为英音音标,[]的音标为美音音标) 1.U在开音节中发[ju ]/ ju: /? duty /'djuːtɪ/ ['dʊti] ...
- Flask download file vs django download file
Only difference is make_response and httpresponse. FLASK VERSION: from flask import make_response @a ...
- 用css方法 可以实现多行 超出宽度 出点点点号
overflow: hidden; -webkit-line-clamp: 2; display: -webkit-box; -webkit-box-orient: vertical;