还是畅通工程(prim和kruskal)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233
还是畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 62608 Accepted Submission(s): 28422
当N为0时,输入结束,该用例不被处理。
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
5
Hint
Huge input, scanf is recommended.
#include<iostream>
using namespace std;
const int maxn=+;
const int inf=1e9+;
int n;
int cost[maxn][maxn];//cost[i][j]两点之间的距离
int mincost[maxn];//从集合x出发到各点的最近距离
bool vis[maxn];//是否在本集合中
void Prim()
{
mincost[]=;//选定1为起点
int ans=;
while(true)
{
int flag=-;
for(int i=;i<=n;i++)
{
if(!vis[i]&&(flag==-||mincost[i]<mincost[flag]))
flag=i;
}
if(flag==-) break;
vis[flag]=true;
ans+=mincost[flag];
for(int i=;i<=n;i++)
mincost[i]=min(mincost[i],cost[flag][i]);//更新 }
cout<<ans<<endl;
}
int main()
{
while(cin>>n)
{
if(n==) break;
for(int i=;i<=n;i++)//初始化
{
for(int j=;j<=n;j++)
{
cost[i][j]=inf;
}
cost[i][i]=;
mincost[i]=inf;
vis[i]=false;
}
for(int i=;i<n*(n-)/;i++)
{
int u,v,w;
cin>>u>>v>>w;
cost[u][v]=w;
cost[v][u]=w; }
Prim();
}
}
Kruskal:
在整个图中找到一条 最小的 不会形成环 的边
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100*100+5;
int fa[maxn];
int n;
struct Edge
{
int u,v,w;//起点 终点 边的权值
}edge[maxn];
bool cmp(const Edge a,const Edge b)//快排
{
return a.w<b.w;//按权值从小到大
}
int Get_fa(int x)//找父亲节点
{
if(fa[x]==x) return x;
return fa[x]=Get_fa(fa[x]);
}
void Kruskal()
{
for(int i=1;i<=n;i++) fa[i]=i; //刚开始每个节点的父亲都是自己,熟悉的并查集
int ans=0,cnt=1;//cnt从1开始 为什么呢? 因为n-1条边确定n个点
for(int i=0;i<n*(n-1)/2;i++) //遍历每一条边
{
int x=Get_fa(edge[i].u);
int y=Get_fa(edge[i].v);
int w=edge[i].w;
if(x!=y)//判断是否属于同一个集合
{
ans+=w;
fa[x]=y;
cnt++;
}
if(cnt==n)//n个村庄已经连接起来了
{
break;
//cout<<ans<<endl;
//return ;
}
}
cout<<ans<<endl;
}
int main()
{
while(cin>>n)
{
if(n==0) break;
for(int i=0;i<n*(n-1)/2;i++) cin>>edge[i].u>>edge[i].v>>edge[i].w;//输入边
sort(edge,edge+(n*(n-1)/2),cmp);//从小到大排序
Kruskal();
}
}
还是畅通工程(prim和kruskal)的更多相关文章
- hdu 1233 还是畅通工程 (prim, kruskal)
还是畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- hdu 1863 畅通工程 (prim)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 还是畅通工程,最小生成树kruskal
题目描述: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...
- 畅通工程再续 (kruskal算法的延续)
个人心得:这题其实跟上一题没什么区别,自己想办法把坐标啥的都给转换为对应的图形模样就好了 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实 ...
- hdoj1879 继续畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1879 思路 这题和hdoj1102很像,图中的有一些路已经修好了,对于这些已经修好的路,我们令还需要修 ...
- hdoj1863 畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1863 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决.这题在hdoj1233的基础 ...
- hdoj1233 还是畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决. 代码 Prime算法: # ...
- HDU 1879 继续畅通工程(Prim||Kruscal模板题)
原题链接 Prim(点归并) //异或运算:相同为假,不同为真 #include<cstdio> #include<algorithm> #define maxn 105 us ...
随机推荐
- Entity Framework Tutorial Basics(29):Stored Procedure in Entity Framework
Stored Procedure in Entity Framework: Entity Framework has the ability to automatically build native ...
- Entity Relationships
Entity Relationships: Here, you will learn how entity framework manages the relationships between en ...
- Linux sogou input method
afda@afda-Y720-15IKB:~$ wget "http://pinyin.sogou.com/linux/download.php?f=linux&bit=64&quo ...
- Djianggo 在windows中安装出现报错的解决方案
Djianggo 在win7下 安装会报错 Traceback (most recent call last):File "setup.py", line 4, in <mo ...
- json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式
JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...
- ubuntu - 14.04,安装rpm程序!!
一,安装rpm转deb的工具“alien”:在软件中心里面输入“alien”,看是否已经安装,如果没有安装则直接安装. 二,把rpm转换为deb:在shell里输入“sudo alien --scri ...
- ReentrantReadWriteLock原理
原文链接:https://www.jianshu.com/p/9f98299a17a5 前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步 ...
- Spark大数据处理 之 RDD粗粒度转换的威力
在从WordCount看Spark大数据处理的核心机制(2)中我们看到Spark为了支持迭代和交互式数据挖掘,而明确提出了内存中可重用的数据集RDD.RDD的只读特性,再加上粗粒度转换操作形成的Lin ...
- Qt 学习之路 2(14):对话框数据传递
Home / Qt 学习之路 2 / Qt 学习之路 2(14):对话框数据传递 Qt 学习之路 2(14):对话框数据传递 豆子 2012年9月15日 Qt 学习之路 2 53条评论 对话框 ...
- Python内置函数、作用域、闭包、递归
1.几个可能用到的内置函数 2.函数内变量的作用域 3.内嵌函数和闭包 4.递归函数 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins ...