POJ 1258 Agri-Net(Prim算法)
题意:n个农场,求把所有农场连接起来所需要最短的距离。
思路:prim算法
课本代码:
//prim算法
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std; int n;
int tot;
int v[150][150];
int dist[150];//存 节点到树 的最小距离
bool use[150];//标记节点是否存在 int main(){
while(scanf("%d",&n)!=EOF){
memset(use,false,sizeof(use));//初始化节点 都存在
tot=0;
use[0]=1;
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&v[i][j]);
dist[0]=0x7FFFFFFF;//赋值为最大值
for(i=1;i<n;i++)//初始距离
dist[i]=v[0][i];
for(i=1;i<n;i++){//连接 剩下的 n-1个节点
int tmp=0;
for(k=1;k<n;k++)//找到最短的距离 节点
if(dist[k]<dist[tmp] &&!use[k]) tmp=k;
tot +=dist[tmp];// 加到 总距离中
use[tmp]=true;
for(k=1;k<n;k++)//调整距离
if(!use[k])
dist[k]=v[k][tmp]<dist[k]?v[k][tmp]:dist[k];
}
printf("%d\n",tot);
}
return 0;
}
另外,这道题也可以用 Kruskal算法,代码如下:
//Kruskal算法
#include<iostream>
using namespace std; int fa[120];
int get_father(int x){
return fa[x]=fa[x]==x?x:get_father(fa[x]);//判断两个节点是否属于一颗子树(并查集)
}
int main(){
int n;
int p[120][120];
int mark[100100];
while(scanf("%d",&n)!=EOF){
memset(mark,0,sizeof(mark));
int i,j,k,m;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
scanf("%d",&p[i][j]);
mark[p[i][j]]=1;
}
for(i=0;i<n;i++) fa[i]=i;
int ans=0;
for(k=1;k<=100000;k++)// kruskal 算法
if(mark[k]){// 若不加mark ,会超时
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j]==k &&get_father(i)!=get_father(j)){
fa[fa[i]]=fa[j];//合并两颗子树(并查集)
ans+=k;
}
}
printf("%d\n",ans);
}
return 0;
}
POJ 1258 Agri-Net(Prim算法)的更多相关文章
- poj 1258 Agri-Net 最小生成树 prim算法+heap不完全优化 难度:0
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41230 Accepted: 16810 Descri ...
- POJ 1258:Agri-Net Prim最小生成树模板题
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45050 Accepted: 18479 Descri ...
- POJ 1258 Agri-Net (最小生成树+Prim)
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39820 Accepted: 16192 Descri ...
- POJ 1258 Agri-Net(Prim)
( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cmath> #include<algori ...
- POJ 1258 Agri-Net (prim水题)
Agri-Net Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) Total Subm ...
- POJ 1258 Agri-Net(Prim)
题目网址:http://poj.org/problem?id=1258 题目: Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)
题目链接: 传送门 Agri-Net Time Limit: 1000MS Memory Limit: 10000K Description Farmer John has been elec ...
- POJ 1258 Agri-Net (Prim&Kruskal)
题意:FJ想连接光纤在各个农场以便网络普及,现给出一些连接关系(给出邻接矩阵),从中选出部分边,使得整个图连通.求边的最小总花费. 思路:裸的最小生成树,本题为稠密图,Prim算法求最小生成树更优,复 ...
- POJ 1258:Agri-Net(最小生成树&&prim)
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38918 Accepted: 15751 Descri ...
随机推荐
- Ubuntu 16.04下编译安装Apache2.4和PHP7结合
Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...
- MIC性能优化策略
MIC性能优化主要包括系统级和内核级:系统级优化包括节点之间,CPU与MIC之间的负载均衡优化:MIC内存空间优化:计算与IO并行优化:IO与IO并行优化:数据传递优化:网络性能优化:硬盘性能优化等. ...
- Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer ...
- 09 Memcached 分布式之取模算法的缺陷
一: Memcached 分布式之取模算法的缺陷(1)假设你有8台服务器,运行中突然down一台,则求余数的底数就7. 后果: key_0%8==0 ,key_0%7==0 =>hist(命中) ...
- PHP 和 AJAX MySQL 数据库实例
HTML 表单 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Collect More Jewels(hdu1044)(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Xshell调节字体大小和样式
有时候没有看着字体太小的,好难受, 调节字体大小: ALT+P快捷键打开
- [APIO2008]免费道路
[APIO2008]免费道路 BZOJ luogu 先把必须连的鹅卵石路连上,大于k条no solution 什么样的鹅卵石路(u,v)必须连?所有水泥路都连上仍然不能使u,v连通的必须连 补全到k条 ...
- Javaweb基础--->Servlet(转载)
今天看到这篇博客,感觉还不错,拿来借鉴学习一下. 一.Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客 ...
- 关于ionic开发中遇到的坑与总结
这次是第二次使用ionic开发混合app,今天算是对这个框架做一个总结,基础的我就不再重复了,网上都有教程.我就说说自己的心得和遇见的各种坑, 之后会陆续补充,想到什么说什么吧. 1.关于ionic效 ...