SCOI 2010 滑雪
题目描述
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最多能到达多少个景点,以及此时最短的滑行距离总和。
输入输出样例
3 3
3 2 1
1 2 1
2 3 1
1 3 10
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 滑雪的更多相关文章
- SCOI 2010 连续攻击游戏(贪心,图论)
SCOI 2010 连续攻击游戏 solution 直接就硬刚 我愿称贪心为暴力 因为题目中要求一定从小到大贪心,那么当前点的下标有能够选取的较大点,那么它一定可以和前面的一个较小点连接,所以可以直接 ...
- [SCOI 2012]滑雪与时间胶囊
Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...
- [SCOI 2010] 股票交易
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1855 [算法] 单调队列优化动态规划 [代码] #include<bits/s ...
- 【BZOJ 1857】【SCOI 2010】传送带
三分套三分,虽然简单,但是也得掌握,,, 时间复杂度$O(log_{1.5}^2 n)$ 一开始WA好几次发现是快速读入里没有return,这样也能过样例?_(:3J∠)_ #include<c ...
- SCOI 2010 序列操作
题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b ...
- [SCOI 2010]传送带
Description 题库链接 在一个 \(2\) 维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段 \(AB\) 和线段 \(CD\) .在 \(AB\) 上的移动速度为 ...
- [SCOI 2010]字符串
Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...
- bzoj 2753 [SCOI 2012] 滑雪与时间胶囊 - Prim
题目传送门 传送点I 传送点II 题目大意 给定一个有$n$个点$m$条边的图,每个点有一个高度$h_{i}$,能从$u$经过一条边到达$v$,当且仅当存在一条边是$(u, v)$或$(v, u)$, ...
- 解题:SCOI 2010 序列操作
题面 线段树......模板题(雾? 然而两种标记会互相影响,必须保证每次只放一个(不然就不知道怎么放了),具体的影响就是: 翻转标记会使得覆盖标记一起翻转,下放的时候就是各种swap 覆盖标记会抹掉 ...
随机推荐
- zTree使用随笔
最近开发过程中,需要写一个公司人员组织架构的树状图,后来选用了依赖jQuery的zTree插件来实现,主要是该插件功能齐全,性能稳定,个性化编辑方便,遂选用了这个插件.我记录了一下根据自身需求定制化修 ...
- Python +selenium之设置元素等待
注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...
- HDU 3001 Travelling (状压DP,3进制)
题意: 给出n<=10个点,有m条边的无向图.问:可以从任意点出发,至多经过同一个点2次,遍历所有点的最小费用? 思路: 本题就是要卡你的内存,由于至多可经过同一个点2次,所以只能用3进制来表示 ...
- 2017.10.2 QBXT 模拟赛
题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...
- Android(java)学习笔记113:Activity的生命周期
1.首先来一张生命周期的总图: onCreate():创建Acitivity界面 onStart():让上面创建的界面可见 onResume():让上面创建的界面 ...
- unbuntu&vim&Kali的各种小知识
1. vmware workstation 15.0.0 2.ubuntu-18.10-desktop 使用网络地址转换 VMware workstation 1.ctrl+alt 返回 unbu ...
- java基础—哈希编码
- PayPal为什么从Java迁移到Node.js 性能提高一倍 文件代码减少44%
大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal 解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...
- Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别
Java的单例模式——饿汉式 package com.swift; //Java单例设计模式——恶汉式 public class SinglePerson { private String name= ...