题目链接

就是裸的最小生成树,复习一下。

prim算法:

G=(V,E),V是点集,E是边集

假设T=(U,TE)是最小生成树。U,TE初始化为空

首先从V中任取一点 假设取V1,然后U={V1},只要U是V的真子集,就从那些一个端点在T中,一个端点在T外的边中,找一条最短边。一直下去,直到找到n-1条边

找边使用 堆优化,复杂度(ElogV) 邻接表复杂度(V2)

 #include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f; struct node{
int v,dis;
node(){}
node(int _v,int _dis){
v=_v;
dis=_dis;
}
bool operator<(const node &b) const {
return dis>b.dis;
}
}; int n,dis[maxn];
vector<node> G[maxn];
bool vis[maxn]; void prim() {
int ans=,num=;
priority_queue<node> pq;
for(int i=;i<n;i++) {
vis[i]=false;
dis[i]=inf;
}
pq.push(node(,));
node f;
while(num<n&&!pq.empty()) {
do{
f=pq.top();
pq.pop();
}while(vis[f.v]&&!pq.empty());
if(!vis[f.v]) {
ans+=f.dis;
vis[f.v]=true;
num++;
for(int i=;i<G[f.v].size();i++) {
int v=G[f.v][i].v;
if(!vis[v]) {
if(dis[v]>G[f.v][i].dis) {
dis[v]=G[f.v][i].dis;
pq.push(node(v,dis[v]));
}
}
}
}
}
if(num<n) printf("-1\n");//因为这里记录的是点的个数。不是边
else printf("%d\n",ans);
} int main() {
while(~scanf("%d",&n)) {
memset(G,,sizeof(G));
for(int i=;i<n;i++) {
for(int j=;j<n;j++) {
int x;
scanf("%d",&x);
if(x) G[i].push_back(node(j,x));
}
}
prim();
}
}

krusual算法:

将图G中的边按权值从小到大选取,使选取的不与生成树构成回路。直到n-1条边为止

判断回路就用并查集搞一下。

 #include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f; int n;
struct Edge{
int u,v,dis;
Edge(){}
Edge(int _u,int _v,int _dis) {
u=_u;
v=_v;
dis=_dis;
}
bool operator <(const Edge &b) const {
return dis<b.dis;
}
}; vector<Edge> edge; int fa[maxn]; int Find(int x) {
if(fa[x]==-) return x;
else return fa[x]=Find(fa[x]);
} void Union(int x,int y) {
int fx=Find(x);
int fy=Find(y);
if(fx!=fy) {
fa[fx]=fy;
}
} int main() {
while(~scanf("%d",&n)) {
memset(fa,-,sizeof(fa));
edge.clear();
for(int i=;i<n;i++) {
for(int j=;j<n;j++) {
int x;
scanf("%d",&x);
if(x&&j<i) edge.push_back(Edge(i,j,x));
}
}
sort(edge.begin(),edge.end());
int num=,ans=;
for(int i=;i<edge.size();i++) {
int u=edge[i].u,v=edge[i].v,dis=edge[i].dis;
if(Find(u)!=Find(v)) {
num++;
ans+=dis;
Union(u,v);
}
}
if(num==n-) printf("%d\n",ans);
else printf("-1\n");
}
}

POJ1358 Agri-Net的更多相关文章

  1. Agri Net POJ1258 && Constructing Roads POJ2421

    题意,在给出的图中,使用最小花费的边,使这个图仍然连通. #include <cstdio> #include <algorithm> #include <cstring ...

  2. UI中经常出现的下拉框下拉自动筛选效果的实现

    小需求是当你在第一个下拉框选择了国家时,会自动更新第二个省份的下拉框,效果如下 两个下拉选择Html如下: <select id="country_select"> & ...

  3. 告别无止境的增删改查:Java代码生成器

    对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里.那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢?   有感于马上要做个比较 ...

  4. A过的题目

    1.TreeMap和TreeSet类:A - Language of FatMouse ZOJ1109B - For Fans of Statistics URAL 1613 C - Hardwood ...

  5. 告别无止境的增删改查--Java代码生成器

    转自:http://www.cnblogs.com/zhuYears/archive/2012/02/29/2373491.html 告别无止境的增删改查--Java代码生成器 有感于马上要做个比较大 ...

  6. 网络-05-端口号-F5-负载均衡设-linux端口详解大全--TCP注册端口号大全备

    [root@test1:Standby] config # [root@test1:Standby] config # [root@test1:Standby] config # [root@test ...

  7. Mybatis中 Integer 值为0时,默认为空字符串的解决办法。

    需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" par ...

  8. CentOS 7 服务端口表

    # Note that it is presently the policy of IANA to assign a single well-known# port number for both T ...

  9. etymon word air aero aeri aer ag agreement walk joint trick skill chief forget out~1

      1● air 2● aero 3● aeri 4● aer 空气 充气       1● ag     做,代理做   =====>agency       1● agr 2● agri 3 ...

随机推荐

  1. Navigator - BOM对象

    Navigator 对象 Navigator 对象包含有关浏览器的信息. 注释:没有应用于 navigator 对象的公开标准,不过所有浏览器都支持该对象. Navigator 对象集合 集合 描述 ...

  2. google/dense_hash_map

    这个库使用时需要注意的地方: 1.在插入数据之前,需要先调用set_empty_key()设置一个空Key,Key的值可以为任意符合类型的.但请注意之后插入的Key不能和空Key相同,否则会abort ...

  3. SpringBoot RestController 同时支持返回xml和json格式数据

    @RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...

  4. 2014蓝桥杯B组初赛试题《六角填数》

    题目描述: 如图[1.png]所示六角形中,填入1~12的数字.     使得每条直线上的数字之和都相同.     图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交 ...

  5. open source libraries: BIAS

    The Basic Image AlgorithmS C/C++ Library (BIAS) is the code base for research and software developme ...

  6. SpringMVC——概述

    Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 Spring MV ...

  7. SimpleTag——认识自定义标签

    自定义标签 自定义标签的开发与应用步骤 编写完成标签功能的 Java 类(标签处理器) 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述 在 JSP 页面中导入和使用自定义标签 ①. 创 ...

  8. HDU 4118 Holiday's Accommodation (dfs)

    题意:给n个点,每个点有一个人,有n-1条有权值的边,求所有人不在原来位置所移动的距离的和最大值. 析:对于每边条,我们可以这么考虑,它的左右两边的点数最少的就是要加的数目,因为最好的情况就是左边到右 ...

  9. Daubechies Wavelet

    The Daubechies wavelets, based on the work of Ingrid Daubechies, are a family of orthogonal wavelets ...

  10. 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果

    建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性 ...