poj1258 Agri-Net (prim+heap)
题目链接:poj1258 Agri-Net
这题我上个月做过,是个大水题,今天看见有人用prim+heap做的,就学习了下。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#define CLR(a,b) memset((a),(b),sizeof((a)))
using namespace std; const int inf = 0x3f3f3f3f;
const int N = ;
int low[N], s[N];
int n, ans, num;
struct Edge{
int v,c;
Edge(int _v=,int _c=):v(_v),c(_c){}
bool operator < (const Edge&r)const{
return r.c < c;
}
};
vector<Edge>g[N]; int prim_heap(){
priority_queue<Edge>q;
int i, u, v, w;
Edge p;
ans = ;//最小生成树总权值
num = ;//已加入最小生成树的顶点数目
q.push(Edge(, ));
while(!q.empty() && num < n){
p = q.top(); q.pop();
u = p.v;
if(s[u]) continue;
s[u] = ;
ans += p.c;
num++;
for(i = ; i < g[u].size(); ++i){
v = g[u][i].v;
if(s[v] == ){
w = g[u][i].c;
if(w < low[v]){
low[v] = w;
q.push(Edge(v, w));
}
}
}
}
if(num < n)
return -;
return ans;
}
int main(){
int i, j, x;
while(scanf("%d", &n) == ){
for(i = ; i < n; ++i)
g[i].clear();
for(i = ; i < n; ++i)
for(j = ; j < n; ++j){
scanf("%d", &x);
g[i].push_back(Edge(j, x));
}
CLR(s, ); CLR(low, inf);
printf("%d\n",prim_heap());
}
return ;
}
poj1258 Agri-Net (prim+heap)的更多相关文章
- 无向图最小生成树(prim算法)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...
- 堆(Heap)和二叉堆(Binary heap)
堆(Heap) The operations commonly performed with a heap are: create-heap: create an empty heap heapify ...
- 索引堆(Index Heap)
首先我们先来看一个由普通数组构建的普通堆. 然后我们通过前面的方法对它进行堆化(heapify),将其构建为最大堆. 结果是这样的: 对于我们所关心的这个数组而言,数组中的元素位置发生了改变.正是因为 ...
- 最小生成树算法详解(prim+kruskal)
最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...
- 最小生成树算法(Prim,Kruskal)
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- 数据结构--画画--最小生成树(Prim算法)
通信网络的最小生成树配置,它是使右侧的生成树值并最小化.经常使用Prim和Kruskal算法.看Prim算法:以防万一N={V,{E}}它是在通信网络,TE它是N设置边的最小生成树.从算法U={u0} ...
- 栈和堆(Stack && Heap)
一.前言 直到现在,我们已经知道了我们如何声明常量类型,例如int,double,等等,还有复杂的例如数组和结构体等.我们声明他们有各种语言的语法,例如Matlab,Python等等.在C语 ...
- 最小生成树问题(prim算法)POJ-1258 Agri-Net
/* 这个题很水,但是,莫名其妙runtime error一晚上,重写了一遍就又没了,很伤心! 题意很简单,大致为n个村庄,连光缆,要求连上所有村庄的长度最短. 输入n,接着是n*n的矩阵,直接用pr ...
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
随机推荐
- Burpsuite之Http Basic认证爆破
有的时候经常遇到401.今天正好朋友问怎么爆破,也顺便记录一下 怕忘记了 referer:http://www.2cto.com/Article/201303/194449.html 看到Burpsu ...
- zoj 1199 几何公式推导
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=199 Point of Intersection Time Limit: ...
- Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分
C. Vasya and Basketball time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 学习日记day7:代码结构规范
1:绝对定位不是随便用的. 2:一定要用相对定位控制文档流,在相对定位里面使用绝对定位控制具体的位置. 3:代码结构尽量简化. 不要加不必要的span: 不要加不必要的类: 4:控制字体样式的类尽量写 ...
- 线程高级应用-心得5-java5线程并发库中Lock和Condition实现线程同步通讯
1.Lock相关知识介绍 好比我同时种了几块地的麦子,然后就等待收割.收割时,则是哪块先熟了,先收割哪块. 下面举一个面试题的例子来引出Lock缓存读写锁的案例,一个load()和get()方法返回值 ...
- Memcache的安装
下载安装包: wget http://www.memcached.org/files/memcached-1.4.32.tar.gz wget https://cloud.github.com/dow ...
- C#_观察者模式
假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户. 把通知这个动作抽象成一个接口. public interface IService { void Notif(); } 客户如果想获得通 ...
- Oracle SQL 调优之 sqlhc
SQL 执行慢,如何 快速准确的优化. sqlhc 就是其中最好工具之一 通过获得sql所有的执行计划,列出实际的性能的瓶颈点,列出 sql 所在的表上的行数,每一列的数据和分布,现有的索引,sql ...
- (转)HashMap分析
原文地址:http://www.cnblogs.com/ITtangtang/p/3948406.html HashMap的数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快 ...
- phalcon: 视图集成(内嵌模板)
当一个网站把不同的模板分割成:头部,中间区域,底部时,我们就需要在不同的[中间区域]页面引入相同的头部跟底部.引入有2种方法, 一种是:在controller中调用: $this->view-& ...