P2573 [SCOI2012]滑雪(kruskalbfs)
P2573 [SCOI2012]滑雪(kruskal&bfs)
这个时间胶囊相当于每个边只用走一次,也就是答案对应的图的边权之和。
考虑从1开始 b f s bfs bfs能走的点和边,建立一个新图,然后在新图跑 k r u s k a l kruskal kruskal即可。
排序的时候 h v h_v hv为第一关键字, w w w为第二关键字。
因为要求点数尽量多,所以 h v h_v hv尽量大,在此基础上要求权最小即可。
时间复杂度: O ( n l o g n + m ) O(nlogn+m) O(nlogn+m)
// Problem: P2573 [SCOI2012]滑雪
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2573
// Memory Limit: 125 MB
// Time Limit: 5000 ms
// Date: 2021-12-17 11:06:56
// --------by Herio--------#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = {402653189,805306457,1610612741,998244353};
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n){for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);
}
template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y){if(x<y) x=y;
}
template <typename T>
void cmn(T &x,T y){if(x>y) x=y;
}
int n,m,H[N];
int h[N],cnt;
struct edge{int to,nt,w;
}e[M<<1];
struct E{int u,v,w;bool operator<(const E&a)const{return H[v]==H[a.v]?w<a.w:H[v]>H[a.v];}
}a[M<<1];
void add(int u,int v,int w){e[++cnt]={v,h[u],w},h[u]=cnt;
}
int sum,num;
bitset<N>vis;
void bfs(){queue<int>q;q.push(1);sum++;vis[1] = 1;while(!q.empty()){int u = q.front();q.pop();for(int i=h[u];i;i=e[i].nt){int v = e[i].to;a[++num] = {u,v,e[i].w};if(!vis[v]){q.push(v),vis[v] = 1;sum++;}}}
}
int s[N];
int find(int x){return x==s[x]?x:s[x]=find(s[x]);
}
int main(){scanf("%d%d",&n,&m);rep(i,1,n) scanf("%d",&H[i]),s[i] = i;rep(i,1,m){int u,v,w;scanf("%d%d%d",&u,&v,&w);if(H[u]>=H[v]) add(u,v,w);if(H[v]>=H[u]) add(v,u,w);}bfs();int x = 0;ll ans = 0;sort(a+1,a+num+1);rep(i,1,num){int u = a[i].u,v=a[i].v,w=a[i].w;u=find(u),v=find(v);if(u!=v){s[u] = v;ans+=w;x++;}if(x==sum - 1) break;}printf("%d %lld\n",sum,ans);return 0;
}
P2573 [SCOI2012]滑雪(kruskalbfs)相关推荐
- 洛谷 P2573 [SCOI2012]滑雪
题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi.a180285 ...
- P2573 [SCOI2012]滑雪
题目描述 a180285 非常喜欢滑雪.他来到一座雪山,这里分布着 �m 条供滑行的轨道和 �n 个轨道之间的交点(同时也是景点),而且每个景点都有一编号 � (1≤�≤�)i (1≤i≤n) 和一高 ...
- 五一劳动节快乐加餐(图论补充)------P2573 [SCOI2012]滑雪
飞机票 题意: a180285 非常喜欢滑雪.他来到一座雪山,这里分布着 mm 条供滑行的轨道和 nn 个轨道之间的交点(同时也是景点),而且每个景点都有一编号(1≤i≤n) 和一高度 hi. a1 ...
- 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB Submit: 2457 Solved: 859 Descripti ...
- [SCOI2012]滑雪 洛谷p2573
题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着MM条供滑行的轨道和NN个轨道之间的交点(同时也是景点),而且每个景点都有一编号ii(1 \le i \le N1≤i≤N)和一高度H_ ...
- [SCOI2012]滑雪 (最小生成树 Kruskal)
题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1≤i≤N)和一高度Hi.a180285能从景点ii滑 ...
- 牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊
链接: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 a180285非常喜欢滑雪.他来到 ...
- 【题解】 [SCOI2012]滑雪
目录 题目 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1复制 说明/提示 [数据范围] 题解 整理题目 思路 考虑顺序 1.只能从高到低 2.到的景点最多.总距离最短 坑点 最后 ...
- [SCOI2012]滑雪与时间胶囊
a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1 ≤ i ≤ N)和一高度Hi.a180285 能从景点i 滑到 ...
最新文章
- 电脑人会得哪些病----------关注健康,关爱生命!
- 素数c语言程序解题思路,C语言上机实验题目解题思路.doc
- angularJs 前端的页面分解与组装
- STL的remove函数和list的remove成员函数
- python csv读取-python如何读取csv数据
- php 原生开发,四个优秀php原生开发实战视频教程推荐(必学)
- SharePoint Set-SPUser 命令拒绝访问
- 健康心理要防八种“过度”
- 3到6年的.NETer应该掌握哪些知识
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
- 远程服务异常处理的实践之一:客户端
- 写一个自己的QQ签名
- 虎牙面试官:String长度有限制吗?是多少?我:这太...
- c语言编程n元一次方程,解n元一次方程
- SPSS学习 (一)概述
- python中平方和_python的平方和怎么理解?
- c语言怎样计算天数,C语言怎样计算天数?
- windows错误代码一览表
- GCC 中的 aligned 和 packed 属性(关于地址对齐)
- 两圆的外切线与内切线的切点算法
热门文章
- 都说找工作难, 你真的好好准备了吗?
- 计算机课例研究方案设计,大学计算机基础案例教学与教学案例设计.doc
- 抖音盒子、得物、小红书混战社交电商
- 2020.10.24参加全球第二届移动开发者大会的一些收获
- css 实现倒计时转圈动画
- python语言不支持面向对象_Python 面向对象(初级篇)
- OpenCVSharp 笑脸检测
- 【进击的技术er】草帽计划,我和小伙伴一起乘风破浪
- mkdir: 无法创建目录: 没有那个文件或目录
- 清北毕业生2019就业去向:北大从政人数多,清华企业比例大,华为成最大赢家...