畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 35957    Accepted Submission(s): 15971

Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
 
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
?
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1879 1233 1875 1232 1102 
 
Pim
#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,邻接表模板)的更多相关文章

  1. hdu 1863 畅通工程 (prim)

    畅通工程Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  3. HDU 1863 畅通工程(Prim算法求解MST)

    题目: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现 ...

  4. HDU 1863 畅通工程 -Kruskal模版

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 1863 畅通工程(Kruskal+并查集)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. hdu 1863 畅通工程 (并查集 、 kruskal)

    畅通工程Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. HDU 1863 畅通工程(Kruskal)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. <hdu - 1863> 畅通工程 并查集和最小生成树问题

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...

  9. hdu 1863 - 畅通工程(MST)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. centos7下安装jdk7

     CentOS7.1 JDK安装 1.卸载自带OPENJDK    用 java -version 命令查看当前jdk版本信息   #java -version    用rpm -qa | grep ...

  2. Struts的url-pattern配置问题

    一,servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  3. 使用Homebrew管理你的mac开发包

    很多人可能不了解 Homebrew, 其实它相当于开发软件界的 Appstore. 比如,如果我要安装 python 的最新版本,那么传统的做法是 1. 到官方网站下载 python 的最新版本 2. ...

  4. Centos7 docker容器 搭建

    Dockerfile 文件如下: # # MAINTAINER Carson,C.J.Zeong <zcy@nicescale.com> # DOCKER-VERSION # # Dock ...

  5. c#.NET中日志信息写入Windows日志中解决方案

    1. 目的应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.在Wind ...

  6. R语言笔记002——sample()函数

    sample()函数 sample(x,size,replace=FALSE) x表示一个或多个向量,size表示从x中随机取的样本个数,replace=FALSE表示不放回抽样,即不会选取到相同的值 ...

  7. (转)Openstack Cascading和Nova Cell

    Openstack是看着AWS成长起来的,这点毋庸置疑:所以AWS大规模商用已成事实的情况下,Openstack也需要从架构和产品实现上进行优化,以满足大规模商用的要求.从已有的实现来看其中两种方式值 ...

  8. Linux软件安装(一)

    软件安装方式: 1. rpm方式 该方式软件安装本质与Windows下安装软件方式一致,就是把软件包里面的二进制代码文件复制到系统指定目录(如 C://program files) 优点:软件安装非常 ...

  9. poj2289二分图多重匹配

    题意:给你一张二分图,求右边点到汇点的最小容量(保证流量为n)是多少 题解:二分答案,每次重新建边跑最大流,看是不是为n就好了 #include<map> #include<set& ...

  10. TCP/IP Socket 的理解

         网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.      TCP 协议对应于传输层,HTTP 协议对应应用层,Socket 则是对 TCP/IP 协议的封装. ...