题目描述

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。

dfs记录所能能到达的点和边,然后把边以到达的点得高度为第一关键字,边长为第二关键字跑克鲁斯卡尔。

#include<bits/stdc++.h>
#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int MAXN=100005,MAXM=1000005;
struct Edge{int v,w,nxt;
}e[MAXM<<1];
int H[MAXN],h[MAXN],vis[MAXN];
struct Node{int u,v,w;bool operator < (const Node& tmp)const{if(H[v]==H[tmp.v]) return w<tmp.w;return H[v]>H[tmp.v];}
}a[MAXM<<1];int fa[MAXN];
int n,m;
int num,cnt,tot;
inline void add(int u,int v,int w)
{e[tot].v=v;e[tot].w=w;e[tot].nxt=h[u];h[u]=tot++;
}
void dfs(int u,int fa)
{int i;if(!vis[u]) num++;vis[u]=1;for(i=h[u];~i;i=e[i].nxt){int v=e[i].v,w=e[i].w;if(v==fa) continue;a[++cnt].u=u;a[cnt].v=v;a[cnt].w=w;if(vis[v]) continue;dfs(v,u);}
}
inline void Makeset()
{int i;f(i,1,n) fa[i]=i;
}
inline int Find(int x)
{return fa[x]==x?x:fa[x]=Find(fa[x]);
}
inline bool Union(int x,int y)
{x=Find(x);y=Find(y);if(x==y) return false;fa[x]=y;return true;
}
int main()
{ios::sync_with_stdio(false);int i,j,u,v,w;long long ans=0;int res=0;memset(h,-1,sizeof(h));cin>>n>>m;f(i,1,n){cin>>H[i];}f(i,1,m){cin>>u>>v>>w;if(H[u]>=H[v]) add(u,v,w);if(H[v]>=H[u]) add(v,u,w);}dfs(1,-1);
//  cout<<num<<"GGGGG"<<endl;
//  f(i,1,cnt){
//      cout<<a[i].u<<" "<<a[i].v<<" "<<a[i].w<<endl;
//  }sort(a+1,a+1+cnt);Makeset();f(i,1,cnt){u=a[i].u;v=a[i].v;w=a[i].w;if(Union(u,v)){ans+=w;res++;if(res==num-1) break;}}cout<<num<<" "<<ans<<endl;return 0;
}

[SCOI2012]滑雪 洛谷p2573相关推荐

  1. 洛谷 P2573 [SCOI2012]滑雪

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

  2. 动态规划——滑雪(洛谷 P1434)

    本文讲述动态规划的经典问题--滑雪 采用递推的动态规划方式求解 先用结构体保存每个点对应的原本坐标位置和高度: 将所有点按高度从小到大排序: 用一个二维数组保存输入的原本数据, 再用一个二维数组保存对 ...

  3. 洛谷:P1434 [SHOI2002] 滑雪 题解

    题目: P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题关键字:记忆化搜索. 首先,这题为什么会想到记忆化?(知道的人直接跳过) 在dfs ...

  4. 洛谷:尼克的任务【记忆化搜索】【记忆化搜索的使用条件】

    个人对记忆化搜索有以下感悟[不保证一定正确,但保证有参考价值] 我们将搜索的过程看成在一个有向无环图上遍历的过程[也必然是这个过程]: 首先,记忆化搜索之所以能让时间复杂度为指数级别的搜索过程降到线性 ...

  5. P2573 [SCOI2012]滑雪(kruskalbfs)

    P2573 [SCOI2012]滑雪(kruskal&bfs) 这个时间胶囊相当于每个边只用走一次,也就是答案对应的图的边权之和. 考虑从1开始 b f s bfs bfs能走的点和边,建立一 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 计算机教室网络安全应急预案,北京科技大学计算机与通信工程学院-计算机与通信工程学院实验室安全应急预案...
  2. C#类在初始化时的执行顺序
  3. 2020身高体重标准表儿童_2019年0~12岁儿童身高体重标准表出炉了,你家娃达标没...
  4. 问题:Cannot assign a device for operation Variable
  5. springboot 循环引用问题
  6. 气泡shader_仿蚂蚁森林气泡
  7. 正则化的logistic回归
  8. 正式版TBSA 6.0(用来分析多层及高层建筑结构的专用程序)
  9. 中秋之际献上【中秋快乐】藏头诗
  10. iOS9.3描述文件怎么安装
  11. 计算机网络拨号,个人拨号上网宽带连接设置图文方法
  12. 十个精妙绝伦的SQL语句,说尽SQL精华
  13. RTB实时竞价, 重塑网络媒体交易规则
  14. aardio修改图标
  15. android将控件镜像显示,Android重写ImageView实现图片镜像效果
  16. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
  17. 天选2无法连接WiFi解决方案(MT7921网卡问题)
  18. gitLab数据备份和恢复
  19. Linux下socket编程之UDP简单实现
  20. esp8266烧录Html文件

热门文章

  1. pypy安装pip以及利用pip安装其它库使用教程
  2. 中创向心力:践行《国家职业教育改革实施方案》,积极推进职业教育改革
  3. 数据库中如何备份数据
  4. 计算机 90学时培训总结,90学时培训心得总结
  5. c语言算正方形面积和周长,c语言中编写一程序计算正方形的周长和面积
  6. QSSQ-Windows 10 Windows11系统版本一键切换工具
  7. 10个打开了我新世界大门的 WebAPI
  8. matplotlib 怎么画核密度
  9. go 语言 优势及 主要用途
  10. 4~20mA模拟电流采集应用方案