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 ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之0808打印链表
题目
- or1200构建sopc系统之软件环境搭建
使用预先编译好的工具链 下载: ftp://ocuser:oc@195.67.9.12/toolchain/or32-elf-linux-x86.tar.bz2 解压 tar xjf or32-elf ...
- WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...
- ADO.NET 操作数据库 --- 01 简单封装
由于我是Java转的C#开始的时候就用的NHihernate,和EF 对ADO.NET使用较少,现在封装一个ADO.NET的工具类来实现数据库的操作,比较简单,望大家多多提意见. 如果大家有什么学习中 ...
- 12.5.3 UNIVERSAL:最终的祖先类:
<pre name="code" class="html">12.5.3 UNIVERSAL:最终的祖先类: 你可以把 UNIVERSAL 看作最终 ...
- 基于visual Studio2013解决面试题之1202最大公共字符串
题目
- RHEL4 i386下安装rdesktop【原创】
http://rpmfind.net/ 1.根据系统下载rdesktop (1)查看Linux版本:# lsb_release -aLSB Version: :core-3.0-ia32:core-3 ...
- 一个很简单的php留言板。。。。搭建在sae上的。。。
我在sae上搭建了一个个人简历的页面: 有兴趣的可以访问 http://671coder.sinaapp.com/ 在做下面一个简单的留言板的时候,卡了我很久,虽然完全没用过php..但是还是最后勉 ...
- C# LDAP认证登录
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X ...
- FreeLink开源呼叫中心设计思想
上一篇大概说了国内外优秀的呼叫中心系统: 国内外优秀呼叫中心系统简单介绍 借鉴上述呼叫中心系统,我们的设计新一代呼叫中心例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY ...