ACM-最小生成树之畅通project——hdu1863
***************************************转载请注明出处:http://blog.csdn.net/lttree***************************************
畅通project
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15572 Accepted Submission(s): 6462
行相应村庄间道路的成本,每行给出一对正整数。各自是两个村庄的编号。以及此两村庄间道路的成本(也是正整数)。为简单起见。村庄从1到M编号。当N为0时。所有输入结束,相应的结果不要输出。
”。
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
3
?
o(╯□╰)o。。。
/****************************************
*****************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : 畅通project *
*Source: hdu 1863 *
* Hint : 最小生成树(Kruskal) *
*****************************************
****************************************/ #include <stdio.h>
#include <algorithm>
using namespace std;
struct EDGE
{
int u,v,cost;
}eg[100001];
int n,m,father[100001]; bool cmp(EDGE e1,EDGE e2)
{
return e1.cost<e2.cost;
} // 并查集 初始化函数
void Init( int m )
{
int i;
for(i=1;i<=m;i++)
father[i]=i;
}
// 并查集 查找函数
int Find(int x)
{
while(father[x]!=x)
x=father[x];
return x;
}
// 并查集 合并函数
void Combine(int a,int b)
{
int temp_a,temp_b;
temp_a=Find(a);
temp_b=Find(b); if(temp_a!=temp_b)
father[temp_a]=temp_b;
} // 最小生成树 Kruskal 算法
int Kruskal( void )
{
EDGE e;
int i,res;
sort(eg,eg+n,cmp);
// 并查集 初始化
Init(m); // 构建最小生成树
res=0;
for( i=0;i<n;++i )
{
e=eg[i];
if( Find(e.u)!=Find(e.v) )
{
Combine(e.u,e.v);
res+=e.cost;
}
}
return res;
} int main()
{
int i,ans;
bool bl;
while( scanf("%d%d",&n,&m) && n )
{
for( i=0;i<n;++i )
scanf("%d%d%d",&eg[i].u,&eg[i].v,&eg[i].cost);
ans=Kruskal(); // 是否全部的点都在同一个集合
bl=true;
for(i=2;i<=m;++i)
if( Find(1)!=Find(i) )
{
bl=false;
break;
} if( bl ) printf("%d\n",ans);
else printf("?\n");
}
return 0;
}
又搞了搞最小生成树的Prim算法。
。。
/****************************************
*****************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : 畅通project *
*Source: hdu 1863 *
* Hint : 最小生成树(Prim ) *
*****************************************
****************************************/
#include <stdio.h>
#include <string.h> #define RANGE 101
#define MAX 0x7fffffff
int cost[RANGE][RANGE];
int mincost[RANGE];
bool used[RANGE]; // n个点,m条边
int n,m; int Min(int a,int b)
{
return a<b? a:b;
} void prim( void )
{
// sum 记录最小生成树权值
int i,v,u,sum;
// 从1到各个点距离,初始化used数组
for( i=1;i<=n;++i )
{
used[i]=false;
mincost[i]=cost[1][i];
}
sum=0; while( true )
{
v=-1; // 从没有连接到的点中,找近期的点
for( u=1;u<=n;++u )
if( !used[u] && (v==-1 || mincost[u]<mincost[v]) )
v=u; if( v==-1 ) break;
if( mincost[v]==MAX ) break; used[v]=true;
sum+=mincost[v]; // 更新到各个点的距离
for( u=1;u<=n;++u )
mincost[u]=Min( mincost[u],cost[v][u] );
} // 推断是否能构成最小生成树
for( i=1;i<=n;++i )
{
if( used[i]==false )
{
printf("? \n");
return;
}
}
printf("%d\n",sum);
} int main()
{
int i,j;
int u,v,c; while( scanf("%d%d",&m,&n) && m )
{
// init cost by MAX
for( i=1;i<=n;++i )
for( j=1;j<=i;++j )
{
if( i==j ) cost[i][j]=0;
else cost[i][j]=cost[j][i]=MAX;
}
for( i=0;i<m;++i )
{
scanf("%d%d%d",&u,&v,&c);
cost[u][v]=cost[v][u]=c;
} prim();
}
return 0;
}
ACM-最小生成树之畅通project——hdu1863的更多相关文章
- hdu 1863 畅通project kruskal || prim
简单最小生成树,畅通project.这三道题目都是练习最小生成树的. 注意一下推断是否有通路时,kruskal能够推断每一个点的祖先是否同样.prim能够推断每一个点是否都加进集合里面了,也就是说是否 ...
- HDU1863 畅通project 【最小生成树Prim】
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu1863 畅通project(判定最小生成树)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- ACM-光滑最小生成树project——hdu1863
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- HDU 1863 畅通project (最小生成树是否存在)
题意 中文 入门最小生成树 prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...
- hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)
题目链接:http://pat.zju.edu.cn/contests/ds/8-06 某地区经过对城镇交通状况的调查.得到现有城镇间高速道路的统计数据,并提出"畅通project" ...
- hdu1879 继续畅通project(最小生成树)
继续畅通project Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 1875 畅通project再续(kruskal算法计算最小生成树)
畅通project再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
随机推荐
- 在JavaScript中也玩变量类型强行转换
<script language="javascript"> var str = '100'; var num = Number(100); a ...
- Mac中MacPorts安装和使用
文章转载至http://www.zikercn.com/node/8 星期四, 06/07/2012 - 19:02 - 张慧敏 MacPorts简单介绍 MacPorts,以前叫做DarwinPor ...
- HTTP协议之ETag字段
整理者:华科小涛:http://www.cnblogs.com/hust-ghtao/ 前段时间参加某公司的面试,问我ETag字段,当时说的不是很清楚,找了些资料,整理为此篇. 简单的说ETag即类似 ...
- [转]Cocos Studio和Cocos2d-x版本对应关系
2015-1-19阅读139 评论0 From: http://www.cocoachina.com/bbs/read.php?tid=182077 版本对应列表: Studio2.x CocosSt ...
- Unicode编码(转)
随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于同一个二进制数字可能会被解释成不同的符号.为了解决这种不兼容的问题 ...
- 图片转换成Base64编码集成到html文件
首先为什么要这么做? 原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...
- python gzip 压缩文件
压缩数据创建gzip文件 先看一个略麻烦的做法 ? 1 2 3 4 5 6 import StringIO,gzip content = 'Life is short.I use python' zb ...
- 四个流行的Java连接池之Proxool篇
Proxool是一个JavaSQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装.可以非常简单的移植到现存的代码中.完全可配置.快速,成熟,健壮.可以透明地为你现存的JDBC驱 ...
- Swift - 经纬度位置坐标与真实地理位置相互转化
通过CoreLocation类,得到的定位信息都是以经度和纬度等表示的地理信息,通过CLGeocoder类可以将其反编码成一个地址.反之,也可根据一个地址获取经纬度. 1,通过经纬度获取地址 1 2 ...
- Axure快捷键大全 Axure RP Pro 6.5快捷键
习惯用Axure快捷键会让你做原型的时候更得心应手.Axure中文网总结了常用的一些快捷键分享给大家 . Axure RP Pro 6.5快捷键大全,如有疏漏,欢迎补充. 基本快捷键: 打开:Ct ...