题目描述

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

输入输出格式

输入格式:

输入的第一行是两个整数 N,MN,M 。

接下来 11 行有 NN 个整数 H_iHi​ ,分别表示每个景点的高度。

接下来 MM 行,表示各个景点之间轨道分布的情况。每行 33 个整数, U_i,V_i,K_iUi​,Vi​,Ki​ 。表示编号为 U_iUi​ 的景点和编号为 V_iVi​ 的景点之间有一条长度为 K_iKi​ 的轨道。

输出格式:

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

输入输出样例

输入样例#1:

3 3
3 2 1
1 2 1
2 3 1
1 3 10
输出样例#1:

3 2

说明

【数据范围】

对于 30\%30% 的数据,保证 1 \le N \le 20001≤N≤2000

对于 100\%100% 的数据,保证 1 \le N \le 10^51≤N≤105

对于所有的数据,保证 1 \le M \le 10^61≤M≤106 , 1 \le H_i \le 10^91≤Hi​≤109 , 1 \le K_i \le 10^91≤Ki​≤109 。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(题外话:今天真是亢奋了一天ovo)

首先bfs一遍,筛出从1号点可以到达的点,并且用这些点建立一个新图

然后用最小生成时树跑一遍新图,记录路径长度....然后就没有然后了?

这是代码

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define N 1000010
#define LL long long
using namespace std;
int n,m;
LL sum,ans,fa[N],h[N];
struct rockdu
{
LL u,v,w,nxt;
}e[N*],d[N*];
int first[N],cnt,cnnt,head[N];
bool vis[N];
bool cmp(rockdu x,rockdu y)
{//终点的高度为第一关键字从大到小排序,边长为第二关键字从小到大排序
if(h[x.v]!=h[y.v]) return h[x.v]>h[y.v];
return x.w<y.w;
}
void ade(LL u,LL v,LL w)
{
e[++cnt].nxt=first[u];first[u]=cnt;
e[cnt].u=u;e[cnt].v=v;e[cnt].w=w;
}
void adenew(LL u,LL v,LL w)
{
d[++cnnt].nxt=head[u];head[u]=cnnt;
d[cnnt].u=u;d[cnnt].v=v;d[cnnt].w=w;
}
void bfs()//buildnew
{
queue<LL>q;
q.push();vis[]=;
while(!q.empty())
{
LL u=q.front(); q.pop();
for(register LL i=first[u];i;i=e[i].nxt)
{
LL v=e[i].v;
adenew(u,v,e[i].w);
if(!vis[v])
{
vis[v]=;
sum++;
q.push(v);
}
}
}
}
//kruskal
inline long long la(long long x)
{
if(fa[x]!=x) fa[x]=la(fa[x]);
return fa[x];
}
inline char nc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
inline long long read(){
char ch=nc();int sum=;
while(!(ch>=''&&ch<=''))ch=nc();
while(ch>=''&&ch<='')sum=sum*+ch-,ch=nc();
return sum;
}
int main()
{
n=read();m=read();
for(register LL i=;i<=n;i++)
{
h[i]=read();
fa[i]=i;
}
for(register LL i=;i<=m;i++)
{
LL a,b,c;
a=read();b=read();c=read();
if(h[a]>=h[b]) ade(a,b,c);
if(h[a]<=h[b]) ade(b,a,c);
}
bfs();
sort(d+,d+cnnt+,cmp);
for(register LL i=;i<=cnnt;i++)
{
register LL x=la(d[i].u),y=la(d[i].v);
if(x!=y)
{
fa[x]=y;
ans+=d[i].w;
}
}
printf("%lld %lld",sum+,ans);
return ;
}

ovo

.

SCOI 2010 滑雪的更多相关文章

  1. SCOI 2010 连续攻击游戏(贪心,图论)

    SCOI 2010 连续攻击游戏 solution 直接就硬刚 我愿称贪心为暴力 因为题目中要求一定从小到大贪心,那么当前点的下标有能够选取的较大点,那么它一定可以和前面的一个较小点连接,所以可以直接 ...

  2. [SCOI 2012]滑雪与时间胶囊

    Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...

  3. [SCOI 2010] 股票交易

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1855 [算法] 单调队列优化动态规划 [代码] #include<bits/s ...

  4. 【BZOJ 1857】【SCOI 2010】传送带

    三分套三分,虽然简单,但是也得掌握,,, 时间复杂度$O(log_{1.5}^2 n)$ 一开始WA好几次发现是快速读入里没有return,这样也能过样例?_(:3J∠)_ #include<c ...

  5. SCOI 2010 序列操作

    题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b ...

  6. [SCOI 2010]传送带

    Description 题库链接 在一个 \(2\) 维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段 \(AB\) 和线段 \(CD\) .在 \(AB\) 上的移动速度为 ...

  7. [SCOI 2010]字符串

    Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...

  8. bzoj 2753 [SCOI 2012] 滑雪与时间胶囊 - Prim

    题目传送门 传送点I 传送点II 题目大意 给定一个有$n$个点$m$条边的图,每个点有一个高度$h_{i}$,能从$u$经过一条边到达$v$,当且仅当存在一条边是$(u, v)$或$(v, u)$, ...

  9. 解题:SCOI 2010 序列操作

    题面 线段树......模板题(雾? 然而两种标记会互相影响,必须保证每次只放一个(不然就不知道怎么放了),具体的影响就是: 翻转标记会使得覆盖标记一起翻转,下放的时候就是各种swap 覆盖标记会抹掉 ...

随机推荐

  1. TCP/IP协议分析含义与功能

    TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即网络接口层.IP层.传输层和应用层.TCP/IP是一组专业化协议,包括IP.TCP.UDP.ARP.ICMP以及其它的一些被称为子协 ...

  2. zfs和ufs文件系统

    系统环境:freebsd 在zfs文件系统上的文件拷贝到ufs文件系统之后,大小翻了一倍.初步断定是文件系统导致的.不知道以后还会不会有新发现.come on!

  3. git如何强制用远程分支更新本地

    git本地即使有修改如何强制更新: 本地有修改和提交,如何强制用远程的库更新本地.我尝试过用git pull -f,总是提示 You have not concluded your merge. (M ...

  4. equals()方法详解

    Java语言中equals()方法的使用可以说比较的频繁,但是如果轻视equals()方法,一些意想不到的错误就会产生.哈哈,说的有点严重了~ 先谈谈equals()方法的出身.equals()方法在 ...

  5. redmine安装详解

    1.Linux:centos6.4(32位)2.Gcc的编译环境.使用make命令编辑.yum install gcc-c++ 3.PCRE PCRE(Perl Compatible Regular ...

  6. python中yield的用法详解

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...

  7. web.xml 中 resource-ref 的注意事项

    配置说明: web.xml 中配置 <resource-ref> <description>Employees Database for HR Applications< ...

  8. Eclipse:Win10中设置Courier New字体

    问题:在Eclipse中设置字体的时候,没有找到Courier New字体.系统为Win10. 解决:Eclipse使用的字体为系统字体.在系统字体中有一部分是隐藏的.Courier New已经在系统 ...

  9. jquery源码学习第一天

    第一天认识了jquery的大体结构,总的大范围是 (function() { // 这里是封装的代码,包括了各种方法.工具 window.JQuery = JQuery window.$ = $; } ...

  10. MySql常用数据操作

    1.数据库操作: MySQL服务管理命令: 1.启动服务:sudo service mysql start 2.停止服务:sudo service mysql stop 3.重新启动服务:sudo s ...