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的更多相关文章
- ACM-最小生成树之畅通project——hdu1863
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- acm专题---最小生成树
kruscal(eloge): 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N ...
- Pedestrian Attributes Recognition Paper List
Pedestrian Attributes Recognition Paper List 2018-12-22 22:08:55 [Note] you may also check the upda ...
- 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 ...
- hdu1863 最小生成树(prim)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1863 思路:最小生成树模板题,直接套模板. 代码: #include<iostrea ...
- 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" ...
随机推荐
- Nginx搭建反向代理服务器过程详解(转)
一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...
- Windows Phone 选择器
using Microsoft.Phone.Controls; using Microsoft.Phone.Tasks; using System; using System.Windows; nam ...
- Scrum三头猪
猪和鸡在过去进入业务合作.他们都打算开一家餐厅,它的售价火腿和鸡蛋. 这想了一下时间猪,我用他的肉,鸡只是用它生下的蛋.万一生意失败,我自己的命就没,,没有不论什么影响. 1. Scrum两类关系人 ...
- nmap 使用注意事项
1.可行的网络主机的高速发现 nmap -sP 192.168.1.* 要么 nmap -sP 192.168.1.-254 2.扫描UDPport DP扫描方式用于推断UDPport的情况. 向目 ...
- (一)IE8以下background不起作用
最近遇到了些小bug,在这里做个记录分享下.低版本的浏览器不支持新属性或者说对代码的解析方式不一样,导致最后解析出来的结果五花八门,各种浏览器之间的兼容的确是一个令开发人员头疼的事情,不过有时候换一个 ...
- JavaScript权威指南科13章 webj浏览器avascript
13.1 clientjavascript window对象是所有clientjavascript特点和api主要的接入点.它代表了一个浏览器窗口,通过window对象引用它. window 方法 a ...
- Eclipse—怎样为Eclipse开发工具中创建的JavaWebproject创建Servlet
在博客<在Eclipse中怎样创建JavaWebproject>中图文并茂的说明了Eclipse中创建JavaWebproject的方法,本篇博客将告诉大家怎样为Eclipse开发工具中创 ...
- RPM安装包-Spec文件參数具体解释与演示样例分析
spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件參数 spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个 ...
- RTP 记录 log 该机制
我们 RCV 在这里,经常跑concurrent request RTP: Receiving Transaction Processor, 它主要是用来处理 RCV_TRANSACTIONS_INT ...
- 挑逗B少年搞计划10 假设你是愿意用我的心脏层剥离一层~
这些天都非常推迟考试啊.然后,学校已安排一周培训,是的.在延迟学习,大狼医院我真的是正常水平. 幸好我们周六周日不让放假了,不然预计进度直接就停了.这两天也是抽出了时间把敲了一下三层的 ...