第一问直接把可以走的边连起来bfs一遍即可

第二问可以用类似kruskal的方法,只不过排序的依据应该变为第一关键字为终点高度(从大到小),第二关键字为边权(从小到大),只排序可以走的边

因为同样高度的点之间的边是双向边,所以同一个高度的所有点构成了一个强连通分量,考虑终点在这个强连通分量的所有边,要么是在这个强连通分量中,要么是从更高处过来的边,我们处理这两种边都可以把它们当成无向边,也就是直接套用kruskal

#include<stdio.h>
#include<algorithm>
using namespace std;
struct edge{
	int x,y,v;
	edge(int a=0,int b=0,int c=0){x=a;y=b;v=c;}
}e[2000010];
int hi[100010],h[100010],to[2000010],nex[2000010],q[2000010],fa[100010],M;
bool v[100010];
int get(int x){return(fa[x]==x)?x:(fa[x]=get(fa[x]));}
void add(int a,int b,int c){
	M++;
	to[M]=b;
	nex[M]=h[a];
	h[a]=M;
	e[M]=edge(a,b,c);
}
bool cmp(edge a,edge b){return(hi[a.y]==hi[b.y])?(a.v<b.v):(hi[a.y]>hi[b.y]);}
int main(){
	int n,m,i,x,y,z,head,tail;
	long long ans;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)scanf("%d",hi+i);
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		if(hi[x]>=hi[y])add(x,y,z);
		if(hi[x]<=hi[y])add(y,x,z);
	}
	head=tail=1;
	q[1]=1;
	while(head<=tail){
		x=q[head];
		head++;
		v[x]=1;
		for(i=h[x];i;i=nex[i]){
			if(!v[to[i]]){
				tail++;
				q[tail]=to[i];
			}
		}
	}
	x=0;
	for(i=1;i<=n;i++)x+=v[i];
	printf("%d\n",x);
	for(i=1;i<=n;i++)fa[i]=i;
	sort(e+1,e+M+1,cmp);
	ans=0;
	for(i=1;i<=M;i++){
		if(!v[e[i].x]||!v[e[i].y])continue;
		x=get(e[i].x);
		y=get(e[i].y);
		if(x!=y){
			fa[x]=y;
			ans+=e[i].v;
		}
	}
	printf("%lld",ans);
}

[BZOJ2753]滑雪与时间胶囊的更多相关文章

  1. BZOJ2753 SCOI2012 滑雪与时间胶囊 【最小生成树】*

    BZOJ2753 SCOI2012 滑雪与时间胶囊 Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有 ...

  2. Bzoj2753 [SCOI2012]滑雪与时间胶囊

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2282  Solved: 796 Descriptio ...

  3. 【BZOJ】【2753】【SCOI2012】滑雪与时间胶囊

    Kruskal/最小树形图 然而蒟蒻并不会做这题>_> 本来以为是有向图最小生成树,即最小树形图,但这数据范围有点…… 膜拜了zyf的题解:http://www.cnblogs.com/z ...

  4. BZOJ 2753 [SCOI2012] 滑雪和时间胶囊 最小生成树

    题目链接: 题目 2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB 问题描述 a180285非常喜欢滑雪.他来到一座雪山, ...

  5. bzoj 2753: [SCOI2012]滑雪与时间胶囊 -- 最小生成树

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MB Description a180285非常喜欢滑雪.他来到一座雪山,这 ...

  6. CDOJ 42/BZOJ 2753 滑雪与时间胶囊 kruskal

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1376  Solved: 487[Submit][St ...

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

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2457  Solved: 859 Descriptio ...

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

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2633  Solved: 910 Descriptio ...

  9. 【最小树形图(奇怪的kruskal)】【SCOI 2012】【bzoj 2753】滑雪与时间胶囊

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB Submit: 1621 Solved: 570 Description ...

随机推荐

  1. 使用JMeter进行一次简单的带json数据的post请求测试

    使用JMeter进行一次简单的带json数据的post请求测试 原文:https://www.cnblogs.com/summer-mm/p/7717812.html 1.启动jmeter:在bin下 ...

  2. 安卓topbar编码实战

    1.先在res->value下新建attrs.xml文件 <?xml version="1.0" encoding="utf-8"?> < ...

  3. js中的Map对象的简单示例

    es6提供一个对象Map, 其功能类似于java中的Map, 下面是java中的Map和js中的Map的简单对比: js中的Map.set()相当于java中的Map.put(), js中的Map.s ...

  4. 理解PHP链式调用

    php链式操作:类似如下实现 $db->where()->limit()->order(); 不使用链式调用时的代码格式如下: namespace Database; class D ...

  5. JS学习笔记之页面信息滚动效果

    效果截图: 1.无缝滚动效果 JS代码: <script> window.onload=function(){ var oInfobox=document.getElementById(' ...

  6. Activiti工作流引擎核心介绍

    引言 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速.超稳定的 BPMN 2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更 ...

  7. 在Servlet中出现一个输出中文乱码的问题

     添加:reqeust.setCharacterEncoding("utf-8");

  8. bzoj4240 zkw版

    复习一波zkw树                                                                      很显然最后建出来的图不是单调序列就是一个类似 ...

  9. 【CF1027F】Session in BSU(dsu,基环树)

    题意:给出n场考试,每场考试有2天可以通过(第ai与bi天).每天最多参加一场考试,现在要求所有考试全部通过的最小天数 n<=1e6,1<=a[i]<b[i]<1e9 思路:F ...

  10. 前端开发各种cross之cross domain

    作为一个苦逼前端开发工程师,不得不面对各种cross,比如面对五花八门的浏览器我们必须cross browser,面对各种终端,我们必须cross device,在这么多年的前端开发经历中,在不同的域 ...