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 ...
随机推荐
- javax.mail.MessagingException: Could not connect to SMTP host: smtp.xdf.cn
1.问题描述:关于使用Java Mail进行邮件发送,抛出Could not connect to SMTP host: xx@xxx.com, port: 25的异常可能: 当我们使用Java Ma ...
- HBase-协处理器详解及实现
协处理器(coprocessor) 把一部分计算移动到数据的存放端. 实例:HBase添加solr二级索引详细代码 简介 协处理器允许用户在region服务器上运行自己的代码,允许用户执行region ...
- kafka原理学习好文
摘自:http://blog.csdn.net/suifeng3051/article/details/48053965 http://blog.csdn.net/ychenfeng/article/ ...
- Visual Studio 当前不会命中断点的问题 编辑pdf文件
Visual Studio 当前不会命中断点的问题 PDB文件概述
- matplotlib两种画散点图的方式
对于matplotlib.pyplot( as plt ) 先输入主体数据部分: import numpy as np import matplotlib.pyplot as plt X_train ...
- 字典:dict.c/dict.h
Redis 源码分析(1):字典和哈希表(dict.c 和 dict.h)http://huangz.iteye.com/blog/1455808两个点:字典结构的运作流程哈希表的渐进式 rehash ...
- ural 2023 Donald is a postman(水)
2023. Donald is a postman Time limit: 1.0 secondMemory limit: 64 MB Donald Duck works as a postman f ...
- 09-THREE.JS 物体缩放,坐标,旋转,位移,是否可见
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- oracle后台进程简介
一:database write--数据写入 DBWR 作用:把SGA中被修改的数据同步到磁盘文件中.保证Buffer Cache中有足够的空闲数据块数量. PS:如果LGWR出现故障, ...
- Git_学习_09_指定某些文件不上传
一.前言 在git提交文件到远程分支时,可能有些文件我们并不想上传. 这时可以使用如下命令来将这些文件从暂存区移除 git rm --cached "文件路径" 注:git add ...