牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊

链接:

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

a180285非常喜欢滑雪。他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1 ≤
i ≤ N)和一高度Hi。a180285 能从景点i 滑到景点j 当且仅当存在一条i 和j 之间的边,且i 的高度不小于j。
与其他滑雪爱好者不同,a180285喜欢用最短的滑行路径去访问尽量多的景点。如果仅仅访问一条路径上的景点,他会觉得数量太少。于是a180285拿出了他随身携带的时间胶囊。
这是一种很神奇的药物,吃下之后可以立即回到上个经过的景点(不用移动也不被认为是 a180285 滑行的距离)。
请注意,这种神奇的药物是可以连续食用的,即能够回到较长时间 之前到过的景点(比如上上个经过的景点和上上上个经过的景点)。
现在,a180285站在1号景点望着山下的目标,心潮澎湃。他十分想知道在不考虑时间
胶囊消耗的情况下,以最短滑行距离滑到尽量多的景点的方案(即满足经过景点数最大的前 提下使得滑行总距离最小)。你能帮他求出最短距离和景点数吗?

输入描述:

输入的第一行是两个整数N,M。 接下来1行有N个整数Hi,分别表示每个景点的高度。
接下来M行,表示各个景点之间轨道分布的情况。每行3个整数,Ui,Vi,Ki。表示编号为Ui的景点和编号为Vi的景点之间有一条长度为Ki的轨道。

输出描述:

输出一行,表示a180285最多能到达多少个景点,以及此时最短的滑行距离总和。

示例1
输入

3 3 
3 2 1 
1 2 1 
2 3 1 
1 3 10

输出

3 2

题解:

题目中说有了时间胶囊回到之前点,而且可以练习使用。我们再根据样例画出图形,其实就是最小生成树,但是边为有向边(也就是只能从高的地方滑向低的地方,如果一样高可以互相达到)
在这里插入图片描述
完美用最小生成树的方法来求
(之前刚写了一个最小生成树的文章链接)
最小生成树的原理:
Kruskal:把最短的集合合并成一个集合
Prim:每次找与现有生成树相连的最短的边
在本题中,我们要找一个边从a到b,可以用Kruskal的方法对点的高低进行排序(从大到小),如果两个点高度相同则对边进行进行排序,然后自高到低一次加入到最小生成树的图中。这样就能保证所有点都是从高到低的方向走。
用Prim的话:点从高到低依次加入,然后每次加入与已有树距离最小的树外点,并不断更新最短距离,这样能保证不重不漏

据说最小树形图还有个专门的算法“朱-刘Edmonds算法”,恕我孤陋寡闻,等学会后更新上

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100001;int n,m,head[maxn];
bool vis[maxn];
int q[maxn*20],sum1;
int fa[maxn],h[maxn];struct edge{ll u,v,w,h,next;
}a[maxn*20];;
bool cmp(edge a,edge b)
{if(a.h==b.h)   return a.w<b.w;return a.h>b.h;
}
int tot=0;
void add(int u,int v,int w)
{a[++tot].next=head[u];a[tot].u=u;a[tot].v=v;a[tot].w=w;a[tot].h=h[v];head[u]=tot;
}
int find(ll x)
{if(fa[x]==x)return x;else fa[x]=find(fa[x]); 
}
void bfs(int now)
{int end=1;sum1=1;//能经过多少点 (景点数量) q[now]=1;vis[now]=1;for(int i=1;i<=end;i++){int now=q[i];for(int j=head[now];j;j=a[j].next){if(!vis[a[j].v]){vis[a[j].v]=true;sum1++;q[++end]=a[j].v;}}}
}	ll kruskal()
{ll sum2=0;// 最短的滑行距离总和int tot1=0;//统计目前树中边的数量 sort(a+1,a+1+tot,cmp);for(int i=1;i<=n;i++)  fa[i]=i;for(int i=1;i<=tot;i++){if(!(vis[a[i].u] && vis[a[i].v]))   continue; int f1=find(fa[a[i].u]);int f2=find(fa[a[i].v]);if(f1!=f2){fa[f2]=f1;tot1++;sum2+=a[i].w;}if(tot1==sum1-1)   break;//当组成树即完成任务 }return sum2;
}
int main()
{int u,v,w;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&h[i]);for(int i=1;i<=m;i++){cin>>u>>v>>w;if(h[u]>=h[v])   add(u,v,w);if(h[u]<=h[v])   add(v,u,w);}bfs(1);//从1开始出发 ,看看最多能到多少景点 kruskal();cout<<sum1<<" "<<kruskal()<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫谈单体架构与微服务架构(上):单体架构

最近微服务架构特别火爆&#xff0c;就跟人工智能、区块链一样&#xff0c;软件架构设计如果不提微服务&#xff0c;感觉就像是与世界先进的架构风格和开发技术脱了节似的&#xff0c;各方各面都无法彰显高大上的气质。本来再打算使用一套系列文章来讨论微服务的方方面面&#…

ASP.NET Core应用程序的参数配置及使用

应用程序的开发不仅仅是写代码这点事情。假设你正在开发一个能够支持多次部署的微服务&#xff0c;此时你就需要有一个合理的应用程序配置方案&#xff0c;以便在开发和生产环境中能够方便地选用不同的配置参数&#xff0c;并且能够在部署到容器服务&#xff08;比如ACS或者Kub…

“Shopee杯” e起来编程暨武汉大学2020年大学生程序设计大赛决赛(重现赛)

比赛链接 文章目录A题 A Simple Problem about election题目描述题解&#xff1a;代码&#xff1a;D题 Deploy the medical team题意&#xff1a;题解&#xff1a;代码&#xff1a;F题 Figure out the sequence题意&#xff1a;题解&#xff1a;代码A题 A Simple Problem about…

RabbitMQ一个简单可靠的方案(.Net Core实现)

前言最近需要使用到消息队列相关技术&#xff0c;于是重新接触RabbitMQ。其中遇到了不少可靠性方面的问题&#xff0c;归纳了一下&#xff0c;大概有以下几种&#xff1a;1. 临时异常&#xff0c;如数据库网络闪断、http请求临时失效等&#xff1b;2. 时序异常&#xff0c;如A任…

牛牛染颜色

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;核心代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 牛牛最近得到了一颗树&#xff0…

.netcore consul实现服务注册与发现-单节点部署

一、Consul的基础介绍Consul是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案&#xff0c;比如 Airbnb的SmartStack等相比&#xff0c;Consul的方案更“一站式”&#xff0c;内置了服务注册与发现框 架、分布一…

分布式事务解决方案以及 .Net Core 下的实现(上)

数据一致性是构建业务系统需要考虑的重要问题 &#xff0c; 以往我们是依靠数据库来保证数据的一致性。但是在微服务架构以及分布式环境下实现数据一致性是一个很有挑战的的问题。最近在研究分布式事物&#xff0c;分布式的解决方案有很多解决方案&#xff0c;也让我在研究的同…

微软MVP张善友告诉你,微服务选型要注意这些地方

周六的下午&#xff0c;广州周大福金融中心的写字楼静悄悄的&#xff0c;53楼的实盈多功能会议室却异常火爆&#xff0c;热闹非凡。来自广州各大科技公司的技术小伙伴们齐聚一堂&#xff0c;他们都在期待着一个人&#xff0c;那就是——微软MVP张善友和他带来的 .NET Core 微服…

像鱼

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给你一个边长为 n 的用硬币摆成的实心三角形&#xff0c;请问把他倒过来最少需要多少步&#xff1f; 例子…

[ZJOI2005]午餐(贪心+dp)

首先若只有一个窗口&#xff0c;利用贪心&#xff0c;按吃饭时间从大到小排序即可 正确性证明&#xff1a; 定义 eat[i] 第i个人的吃饭时间&#xff0c;time[i] 第i个人的打饭时间 延长时间T[i]max(eat[i]- ∑ji1ntimej\sum\limits_{ji1}^ntime_jji1∑n​timej​ ,0) 最后…

【图论】【模板】静态仙人掌(luogu 5236)

【模板】静态仙人掌 题目大意 给你一个无向仙人掌图&#xff08;保证每条边至多出现在一个简单回路中的无向图&#xff09;&#xff0c;问你两个点之间的最短路距离 输入样例#1 9 10 2 1 2 1 1 4 1 3 4 1 2 3 1 3 7 1 7 8 2 7 9 2 1 5 3 1 6 4 5 6 1 1 9 5 7输出样例#1 5 …

SCF: 简单配置门面

Simple Configuration Facade, 简写为 SCF。是 代码 和 外部配置 (properties文件, 环境变量&#xff0c;系统/命令行参数, yaml文件, 等等)之间的一层抽象. 命名上和另一个著名组件slf4j (Simple Logging Facade for Java)相似, 在配置领域的地位也和slf4j &#xff08;.NET可…

【矩阵乘法】【倍增】美食家(luogu 6772)

美食家 题目大意 给你一个有向图&#xff0c;边权为经过所需时间 每个点有一个点权&#xff0c;有些点还有有特殊的点权 当你到达一个点后&#xff0c;可以获得该点的点权&#xff08;重复经过可以重复获得&#xff0c;但不能停留&#xff09;&#xff0c;若在某个时间到某个…

.net core实践系列之短信服务-为什么选择.net core(开篇)

前言从今天我将会写.net core实战系列&#xff0c;以我最近完成的短信服务作为例子。该系列将会尽量以最短的时间全部发布出来。源码也将优先开源出来给大家。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS.NET CORE简介ASP.NET Core 是一个跨平台的高性能开源…

.netcore consul实现服务注册与发现-集群完整版

一、Consul的集群介绍Consul Agent有两种运行模式&#xff1a;Server和Client。这里的Server和Client只是Consul集群层面的区分&#xff0c;与搭建在Cluster之上的应用服务无关&#xff0c; 以Server模式运行的Consul Agent节点用于维护Consul集群的状态&#xff0c;官方建议每…

浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言上个星期完成了surging 的0.9.0.1 更新工作&#xff0c;此版本通过nuget下载引擎组件&#xff0c;下载后&#xff0c;无需通过代码build集成&#xff0c;引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎&#xff0c;而这篇将介绍浅谈surging服务引擎中的rabbi…

csp-j/s总结

文章目录csp-jcsp-s总结csp-j T1傻逼题(我是傻逼&#xff09;&#xff0c;手残把&打成整除了&#xff08;大样例还对了gg&#xff09; T2乱推&#xff0c;然后打了个O(n)O(n)O(n)&#xff0c;却WA了15分&#xff1f; T3看了看&#xff0c;修改不会相互影响&#xff1f;那不…

.net core实践系列之短信服务-架构设计

前言上篇《.net core实践系列之短信服务-为什么选择.net core&#xff08;开篇&#xff09;》简单的介绍了&#xff08;水了一篇&#xff09;.net core。这次针对短信服务的架构设计和技术栈的简析。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS为什么需要架…

CAP 2.3版本发布,支持 MongoDB

前言经过2个月的调整及测试&#xff0c;CAP 2.3 版本终于发布了&#xff0c;这个版本最大的特性就是对于 MongoDB 的支持&#xff0c;感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR&#xff0c;相信随着博客园的使用&#xff0c;CAP 会越来越多的帮助到更多的人。CAP …

.NETCore 实现容器化Docker与私有镜像仓库管理

一、Docker介绍Docker是用Go语言编写基于Linux操作系统的一些特性开发的&#xff0c;其提供了操作系统级别的抽象&#xff0c;是一种容器管理技术&#xff0c;它隔离了应用程序对基础架构&#xff08;操作系统等&#xff09;的依赖。相较于虚拟机而言&#xff0c;Docker共享的是…