【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)

2753: [SCOI2012]滑雪与时间胶囊

Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 2457  Solved: 859

Description

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

Input

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

Output

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

Sample Input


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

Sample Output

3 2

HINT

【数据范围】 

    对于30%的数据,保证 1<=N<=2000 

    对于100%的数据,保证 1<=N<=100000 

对于所有的数据,保证 1<=M<=1000000,1<=Hi<=1000000000,1<=Ki<=1000000000。

Source

 

 

【分析】

  说实话我看的时候也觉得是最小树形图。【然后表示朱刘算法忘得差不多了。。

  但其实这个MST可以搞定ORZ。。

  首先BFS,把能到的点标记一下,顺便求第一问。

  你可以看成同一高度的SCC缩点(里面当然直接MST就好的了),那就是个分层图,按高度大小分的话呢,是一个DAG。

  DAG的话、跑朱刘是不会找到环的,于是你第一步就搞定了。【应该是这样的意思吧,网上的人不知道干嘛。。

  然后其实可以把上面整个过程合成一个,就是按照  第一键值为终点的高度,第二键值为边的权值,跑MST  就行了。

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 using namespace std;
 8 #define Maxn 1000010
 9 #define Maxm 1000010
10 #define LL long long
11 
12 int h[Maxn],fa[Maxn];
13 struct node
14 {
15     int x,y,c,next;
16 }t[Maxm*2];
17 int first[Maxn],len;
18 
19 void ins(int x,int y,int c)
20 {
21     if(h[x]>h[1]) return;
22     t[++len].x=x;t[len].y=y;t[len].c=c;
23     t[len].next=first[x];first[x]=len;
24 }
25 
26 bool cmp(node x,node y) {return (h[x.y]==h[y.y])?(x.c<y.c):(h[x.y]>h[y.y]);}
27 
28 int a1=1,st;
29 LL a2=0;
30 bool vis[Maxn];
31 queue<int > q;
32 void bfs()
33 {
34     memset(vis,0,sizeof(vis));
35     vis[st]=1;q.push(st);
36     while(!q.empty())
37     {
38         int x=q.front();
39         for(int i=first[x];i;i=t[i].next)
40         {
41             int y=t[i].y;
42             if(!vis[y])
43             {
44                 a1++;
45                 q.push(y);
46                 vis[y]=1;
47             }
48         }
49         q.pop();
50     }
51 }
52 
53 int ffa(int x)
54 {
55     if(fa[x]!=x) fa[x]=ffa(fa[x]);
56     return fa[x];
57 }
58 
59 int main()
60 {
61     int n,m;
62     scanf("%d%d",&n,&m);
63     for(int i=1;i<=n;i++) scanf("%d",&h[i]);
64     len=0;
65     memset(first,0,sizeof(first));
66     for(int i=1;i<=m;i++)
67     {
68         int x,y,c;
69         scanf("%d%d%d",&x,&y,&c);
70         if(h[x]<h[y]) swap(x,y);
71         if(h[x]==h[y]) {ins(x,y,c);ins(y,x,c);}
72         else ins(x,y,c);
73     }
74     st=1;bfs();
75     sort(t+1,t+1+len,cmp);
76     for(int i=1;i<=n;i++) fa[i]=i;
77     for(int i=1;i<=len;i++)
78     {
79         if(!vis[t[i].x]||!vis[t[i].y])  continue;
80         if(ffa(t[i].x)!=ffa(t[i].y))
81         {
82             a2+=t[i].c;
83             fa[ffa(t[i].x)]=ffa(t[i].y);
84         }
85     }
86     printf("%d %lld\n",a1,a2);
87     return 0;
88 }
View Code

 

要开long long

 

2017-03-29 10:05:58

转载于:https://www.cnblogs.com/Konjakmoyu/p/6638248.html

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

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

相关文章

SortedMap接口实现排序

SortedMap接口主要提供有序的Map实现。SortedMap接口是排序接口&#xff0c;只要是实现了此接口的子类&#xff0c;都属于排序的子类&#xff0c;TreeMap也是此接口的一个子类 Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap。 TreeMap实现了SortedMap接口&#xf…

mysql漏洞包_MySQL npm包中的本地文件泄露漏洞

“A pure node.js javascript Client implementing the MySQL protocol.”漏洞在某次安全评估中&#xff0c;Synacktiv专家无意中发现某个应用可以从另一台MySQL服务器中读取敏感数据&#xff0c;而该应用程序正是使用了mysql的npm软件包。该npm软件包所支持的LOAD DATA LOCAL命…

java实现MD5加密

MD5加密是一种常见的加密方式&#xff0c;我们经常用在保存用户密码和关键信息上。那么它到底有什么&#xff0c;又什么好处呢&#xff0c;会被这么广泛的运用在应用开发中。 信息-摘要算法&#xff08;Message-digest Algorithm 5&#xff0c;MD5&#xff09;于90年代初由MIT …

jspwiki mysql_Wiki.js初体验

利用JSPWiki搭建简易企业wiki平台。今天介绍一下基于NodeJS技术的开源项目Wiki.js&#xff0c;其界面简洁美观&#xff0c;支持多种编辑器、多种用户验证方式、多种备份存储方式&#xff0c;支持国际化、自定义主题(Theme)、流量分析等。更多正在开发中的功能&#xff0c;界面也…

java中Map有哪些实现类

Java中的map是一个很重要的集合&#xff0c;他是一个接口&#xff0c;下面继承它实现了多个实现类&#xff0c;这些类各有千秋&#xff0c;各自有个各自的优点和缺点 如下图 map的主要特点是键值对的形式&#xff0c;一一对应&#xff0c;且一个key只对应1个value。其常用的map…

设备的分配与调度简单方案_连铸生产调度与动态重调度的优化与研究-3,炼钢技术(3)原创...

基于生产扰动分类的二阶段遗传算法求解动态重调度问题4.1引言电炉炼钢-连铸生产对整个生产的节奏要求较高&#xff0c;各个工序各个工位间配合要比较紧密&#xff0c;但实际的生产过程中总会存在许多不可避免的扰动因素&#xff0c;必须根据实时现场的监控数据来进行动态调度以…

敏捷开发总结(1)软件研发过程

敏捷开发总结&#xff08;1&#xff09;软件研发过程 转载于:https://www.cnblogs.com/lexiaofei/p/6644326.html

java for循环 嵌套for循环-标签使用

continue和break可以改变循环的执行流程&#xff0c;但在多重循环中&#xff0c;这两条语句无法直接从内层循环跳转到外层循环。在C语言中&#xff0c;可以通过goto语句实现多重循环的跳转&#xff0c;但在非循环结构中使用goto语句会使程序的结构紊乱&#xff0c;可读性变差。…

WPF 窗体边框处理

一般做wpf窗口时都不会使用默认的标题栏等&#xff0c;会把他隐藏掉 此时设置以下属性 WindowStyle、AllowsTransparency、ResizeMode 中的两个或三个都能达到目的。 有一种场景&#xff0c;针对.Net 4.0及以下版本&#xff0c;4.5 直接就支持操作 1. 隐藏边框 2.保留鼠标移动到…

mysql 查询时间转换_数据库查询时日期的转换

首先简单说明一下&#xff0c;laravel框架中查询并打印sql语句的办法&#xff0c;不管任何时候由于sql语句报错时&#xff0c;都可以先打印一下&#xff0c;分析一下是什么原因造成的错误①引入laravel框架DB类useIlluminate\Support\Facades\DB;②开启框架日志记录DB::connect…

浅谈Spring之@Nullable、@NonNull注解

NonNull 可以标注在方法、字段、参数之上&#xff0c;表示对应的值不可以为空 Nullable 注解可以标注在方法、字段、参数之上&#xff0c;表示对应的值可以为空

事务概念和事务四大特性和隔离级别

什么是事务 事务四大特性 原生的JDBC事务处理 事务的隔离级别

squid mysql认证_Squid 3.1.7通过mysql_auth方式认证

Squid 3.1.7通过mysql_auth方式认证(FreeBSD平台)一、下载相应软件及补丁#fetch http://people.arxnet.hu/airween/mysql_auth/mysql_auth-0.8.tar.gz#tar xvzf mysql_auth-0.8.tar.gz#cd mysql_auth-0.8#patch -p1 < ../additionalselect.patchpatching file src/confparse…

Spring事务传播属性和隔离级别

Spring事务传播属性和隔离级别 一、Spring事务传播属性&#xff08;Propagation&#xff09;&#xff1a; 1) REQUIRED&#xff08;默认属性&#xff09; 如果存在一个事务&#xff0c;则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时&#xff0c;会为…

ClickHouse之简单性能测试

前面的文章ClickHouse之初步认识已经简单的介绍了ClickHouse&#xff0c;接下来进行简单的性能测试。测试数据来源于美国民用航班的数据&#xff0c;从1987年到2017年&#xff0c;有1.7亿条。 环境&#xff1a; centos 6.3&#xff0c;32G内存&#xff0c;24核 下载脚本&#x…

泛型数组

定义泛型数组 在写程序时&#xff0c;大家可能会遇到类似String[] list new String[8];的需求&#xff0c;这里可以定义String数组&#xff0c;当然我们也可以定义泛型数组&#xff0c;泛型数组的定义方法为 T[]&#xff0c;与String[]是一致的&#xff0c;下面看看用法&#…

是前端类库还是前端框架?

一、BootstrapBootstrap是一系列常用CSS和jQuery plugin的集合&#xff0c;典型的UI库&#xff0c;带给你的是栅格系统&#xff0c;是预置的按钮、表单、列表、导航、响应式等样式&#xff0c;它在你独立开发的时候非常有用。因为能节约用来设计网页的时间&#xff0c;而且这套…

Java泛型详解:<T>和Class<T>的使用,泛型类

单独的T 代表一个类型 &#xff0c;而 Class代表这个类型所对应的类&#xff0c; Class<&#xff1f;>表示类型不确定的类 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素)T - Type&#xff08;Java 类&#xff09;K - Key&#xff08;键&#xff09;V - …

python入门知识大全_python基础知识有哪些

Python基础知识&#xff1a;1、引用和对象&#xff1b;2、可变数据类型和不可变数据类型&#xff1b;3、引用传递和值传递&#xff1b;4、深拷贝和浅拷贝&#xff1b;5、基本数据类型&#xff1b;6、关键字、标识符和内置函数&#xff1b;7、算术、赋值运算符等等。Python基础知…