P1547 Out of Hay
传送门 练习
只是一个最小生成树的水题,拿来练练模板
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 10001
struct hh
{
int x,y,z;
}t[maxn];
int n,m,fa[maxn],ans=,bj,jl[maxn],top=;
bool cmp(const hh&x,const hh&y)
{
return x.z<y.z;
}
inline int find(int u)
{
if(fa[u]==u) return u;
fa[u]=find(fa[u]);
return u=fa[u];
}
inline void kruskal()
{
int f1,f2,k,i;
k=;
for(i=;i<=n;i++) fa[i]=i;//初始化
for(i=;i<=m;i++)
{
f1=find(t[i].x);
f2=find(t[i].y);
if(f1!=f2)
{
ans=ans+t[i].z;
jl[++top]=t[i].z;
fa[f1]=f2;
k++;
if(k==n-) break;
}
}
}
int main()
{
cin>>n>>m;
ans=;bj=;
for(int i=;i<=m;i++)
{
cin>>t[i].x>>t[i].y>>t[i].z;
}
sort(t+,t+m+,cmp);
kruskal();
sort(jl+,jl+top);
cout<<jl[top]<<endl;
return ;
}
再附上最小生成树纯模板:
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
struct edge{int x,y,z;}a[maxn];//定义数组(好用的结构体)
int n,m,fa[maxn],ans=,bj;
bool cmp(const edge&x,const edge&y)//重定义sort函数(背模板吧。。)
{
return x.z<y.z;
}
int find(int u)//查找祖先
{
if(fa[u]==u) return fa[u];
fa[u]=find(fa[u]);
return fa[u];
}
void kruskal()//kruskal的核心程序
{
int f1,f2,k,i;
k=;
for(i=;i<=n;i++) fa[i]=i;
for(i=;i<=m;i++)
{
f1=find(a[i].x);
f2=find(a[i].y);//并查集基本操作
if(f1!=f2)//两点之间没有边(有边就不管)
{
ans=ans+a[i].z;
fa[f1]=f2;
k++;//搭边并记录
if(k==n-) break;//图刚好为最小生成树,退出
}
}
if(k<n-){cout<<"orz"<<endl;bj=;return;}//边数达不到最小生成树要求
}
int main()
{
cin>>n>>m;//输入点数,边数
ans=;bj=;//ans记录总的边权长,bj判断能否组成最小生成树
for(int i=;i<=m;i++)
{
cin>>a[i].x>>a[i].y>>a[i].z;//输入点1,点2,并赋上权值
}
sort(a+,a+m+,cmp);//从小到大排序
kruskal();//建树
if(bj) cout<<ans<<endl;//有最小生成树就输出ans
return ;
}
P1547 Out of Hay的更多相关文章
- 洛谷——P1547 Out of Hay
P1547 Out of Hay 题目背景 奶牛爱干草 题目描述 Bessie 计划调查N (2 <= N <= 2,000)个农场的干草情况,它从1号农场出发.农场之间总共有M (1 & ...
- 洛谷P1547 Out of Hay
题目背景 奶牛爱干草 题目描述 Bessie 计划调查N (2 <= N <= 2,000)个农场的干草情况,它从1号农场出发.农场之间总共有M (1 <= M <= 10,0 ...
- 洛谷 P1547 Out of Hay (最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1547 思路: 嗯...既然题中已经说了是最小生成树,那么是需要在最小生成树的模板上稍作修改即可.要 ...
- P1547 Out of Hay 洛谷
https://www.luogu.org/problem/show?pid=1547 题目背景 奶牛爱干草 题目描述 Bessie 计划调查N (2 <= N <= 2,000)个农场的 ...
- [总结]最小生成树之Kruskal算法
目录 一.最小生成树的相关知识 1. 树的性质 2. 生成树 3. 最小生成树 4. 最小生成树的性质 二.Kruskal算法求最小生成树 1. 核心思想 2. 具体流程 3. 图示 4. 代码实施 ...
- 瓶颈生成树与最小生成树 POJ 2395 Out of Hay
百度百科:瓶颈生成树 瓶颈生成树 :无向图G的一颗瓶颈生成树是这样的一颗生成树,它最大的边权值在G的所有生成树中是最小的.瓶颈生成树的值为T中最大权值边的权. 无向图的最小生成树一定是瓶颈生成树,但瓶 ...
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
题目描述 Farmer John suffered a terrible loss when giant Australian cockroaches ate the entirety of his ...
- [BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草
[BZOJ1618][Usaco2008 Nov]Buying Hay 购买干草 试题描述 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草. 他知道N(1≤N≤100)个干草 ...
- Out of Hay
Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13094 Accepted: 5078 Descripti ...
随机推荐
- python 闭包和装饰器
python 闭包和装饰器 一.闭包闭包:外部函数FunOut()里面包含一个内部函数FunIn(),并且外部函数返回内部函数的对象FunIn,内部函数存在对外部函数的变量的引用.那么这个内部函数Fu ...
- 3、CentOS 6.5系统安装配置Tomcat 8详细过程
安装环境:CentOS-6.5 安装方式:源码安装 软件:apache-tomcat-8.0.0.RC3.tar.gz 安装前提 安装tomcat 将apache-tomcat-8.0.0.RC3.t ...
- 导弹拦截 p1020
第一问就是求最长不上升子序列的长度,要写O(nlogn)的算法.... 对于这种nlogn的算法,只能求出长度,不能求出具体的序列.这种算法实现过程如下: 我们定义len为到目前为止最长不上升子序列的 ...
- Spring Boot 实现RESTful webservice服务端示例
1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: fa ...
- Differences Between Enterprise, Standard and Standard One Editions on Oracle 11.2 (Doc ID 1084132.1)
标准版不允许并行.分区.闪回.各种缓存等大数据量必须特性,如此限制,oracle摆明了只卖企业版,买标准版不如mysql(如果不熟悉postgresql的话). Oracle企业版1 CPU 20w起 ...
- Java开发人员必会的基本Linux命令(转)
原文链接:http://www.cnblogs.com/zhuawang/p/5212809.html http://explainshell.com/ 本文并不会对所有命令进行详细讲解,只给出常见用 ...
- linux 中部署 rsync 实现文件远程备份及 同步
客户端:数据源:服务端:数据接收方 rsync官方文档:https://www.samba.org/ftp/rsync/rsync.html 手动测试用“通过远程外壳访问"里的语法: 参考1 ...
- TensorFlow 生成 .ckpt 和 .pb
原文:https://www.cnblogs.com/nowornever-L/p/6991295.html 1. TensorFlow 生成的 .ckpt 和 .pb 都有什么用? The . ...
- bzoj 1419 Red is good - 动态规划 - 概率与期望
Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一 ...
- topcoder srm 370 div1
problem1 link 枚举每一种大于等于$n$的计算其概率即可. problem2 link 首先二分答案,然后计算.令$f[i][j]$表示移动完前$i$最后一个在位置$j$的最小代价. pr ...