首页 > 其他分享 >#E. 滑雪与时间剂

#E. 滑雪与时间剂

时间:2024-09-29 20:25:17浏览次数:5  
标签:int ll tot fa 时间 滑雪 5000000 es

#E. 滑雪与时间剂

  • 题意

有N个点,每个点有自己的高度,只能从高处到低处

如果一条边两边高度不同,则路为单向,否则为双向

他可以随时回到之前的任意一点,从1点出发,在满足到的点尽可能多的情况下求最小距离

  • 分析

对于任意点来说,只能从比他更高(或一样高)的点走到

所以按照高度作为第一关键字排序,再跑最小生成树即为答案

  • 细节

先要跑一遍DFS,确定可到个数后再跑最小生成树

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,h[5000000],vis[5000000],cnt,ans,fa[5000000];
ll head[5000000],tot,toto;
struct nood{
	ll v;
	ll w;
	ll lz;//来自哪里 
	ll nxt;
}es[5000000];
struct nood1{
	ll x;
	ll y;
	ll w;
}es1[5000000];
void adde(ll x,ll y,ll z){
	es[++tot].v=y,es[tot].w=z,es[tot].lz=x,es[tot].nxt=head[x],head[x]=tot;
}
void dfs(ll x){
	vis[x]=1;
	cnt++;
	for(int i=head[x];i;i=es[i].nxt){
		ll v=es[i].v;
		if(!vis[v]){
			dfs(v);
		}
	}
}
int find(int x){
	if(fa[x] == x) 
		return x;
	return fa[x] = find(fa[x]);
}
void merge(ll x,ll y){
	ll xx=find(x);
	ll yy=find(y);
	if(xx!=yy){
		fa[xx]=yy;
	}
}
bool cmp(nood1 a,nood1 b){
	if(h[a.y]==h[b.y]){
		return a.w<b.w;
	}
	return h[a.y]>h[b.y];
}
void kru(){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	sort(es1+1,es1+toto+1,cmp);
	for(int i=1;i<=toto;i++){
		if(find(es1[i].x)!=find(es1[i].y)){
			ans+=es1[i].w;
			//fa[find(es1[i].x)]=fa[es1[i].y];
			merge(es1[i].x,es1[i].y);
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>h[i];
	}
	ll x,y,z;
	for(int i=1;i<=m;i++){
		cin>>x>>y>>z;
		if(h[x]>=h[y]){
			adde(x,y,z);
		}
		if(h[x]<=h[y]){
			adde(y,x,z);
		}
	}
	dfs(1);
	for(int i=1;i<=tot;i++){
		if(vis[es[i].lz]&&vis[es[i].v]){
			es1[++toto].x=es[i].lz;
			es1[toto].y=es[i].v;
			es1[toto].w=es[i].w;
			//cout<<es1[toto].w<<" "<<es1[toto].x<<" "<<es1[toto].y<<endl;
		}
	}
	kru();
	cout<<cnt<<" "<<ans;
}

标签:int,ll,tot,fa,时间,滑雪,5000000,es
From: https://www.cnblogs.com/Misty-post/p/18440679

相关文章

  • VMD-BKA-CNN-BiLSTM四模型多变量时间序列光伏功率预测一键对比 Matlab代码
    基于VMD-BKA-CNN-BiLSTM、VMD-CNN-BiLSTM、VMD-BiLSTM、BiLSTM四模型多变量时间序列光伏功率预测一键对比(仅运行一个main即可)[原创未发表]Matlab代码赠送BKA原文献每个模型的预测结果和组合对比结果都有!运行步骤:1.先运行main1进行VMD分解2.在运行main2进行四模型一......
  • redis 过期时间
     EXPIRE|Docshttps://redis.io/docs/latest/commands/expire/The EXPIRE commandsupportsasetofoptions:NX --SetexpiryonlywhenthekeyhasnoexpiryXX --SetexpiryonlywhenthekeyhasanexistingexpiryGT --Setexpiryonlywhenthenewex......
  • 多层时间轮原理以及使用
    文章目录背景常用定时器实现任务队列时间轮介绍基本结构指针移动定时任务插入循环任务插入代码示例多层时间轮使用流程代码背景在软件开发中,定时器是一个极为常用的组件,它发挥着至关重要的作用。通过定时器,开发者能够精确地控制程序中的时间流程,实现诸如定时任务......
  • 2073. 买票需要的时间
    有n个人前来排队买票,其中第0人站在队伍最前方,第(n-1)人站在队伍最后方。给你一个下标从0开始的整数数组tickets,数组长度为n,其中第i人想要购买的票数为tickets[i]。每个人买票都需要用掉恰好1秒。一个人一次只能买一张票,如果需要购买更多票,他必须走......
  • C语言计算程序运行的时间长度
    C语言计算程序运行的时间长度也就是求一段代码的运行结束后耗时多长时间的问题!!!求100以内的质数的代码,加上计数和计时功能clock_tstartend取起始时间和终止时间,计算两者之差,得出代码运行所用时间!!!cpu_time_used双精度,保存时间CLOCKS_PER_SEC宏,每秒的clock数clock_t,C......
  • 算法复杂度之时间复杂度
    一.数据结构前言1.1数据结构数据结构(Datastructure)是计算机存储,组织数据的方式,指互相之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以要学习各式各样的数据结构,如:线性表,树,图,哈希等。(不仅能存储数据,还能够管理数据)1.2算法......
  • 时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发
    时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发利用新型营销方式,将闲置的物品通过拍卖,让价格一提再提让用户趣在其中,营造一种不一样的购物体验!拍卖列表页列表页采用多分类,广告轮播及流动公告和拍卖商品列表组成商品列表包含了拍品基本信息以及状态和参与人数,另有当前拍品......
  • 【风光不确定】基于多时间尺度滚动优化算法的主动配电网研究【IEEE33节点】(Matlab代码
    目录......
  • 课后时间
    1.课后实验:出三十道一百以内的四则运算importjava.util.Random;publicclasshomework{publicstaticvoidmain(String[]args){intnum1,num2,temp,choose;num1=0;num2=0;temp=0;choose=0; for(inti=1;i<=30;i++) { choose=add();//将随机得到一个一百以内的......
  • TimeMOE: 使用稀疏模型实现更大更好的时间序列预测
    传统上,预测这些趋势涉及针对每种情况的专门模型。最近的进展指向了可以处理广泛预测问题的"基础模型"。这是9月份刚刚发布的论文TimeMOE。它是一种新型的时间序列预测基础模型,"专家混合"(MixtureofExperts,MOE)在大语言模型中已经有了很大的发展,现在它已经来到了时间序列。......