[BZOJ2753]滑雪与时间胶囊
第一问直接把可以走的边连起来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]滑雪与时间胶囊的更多相关文章
- BZOJ2753 SCOI2012 滑雪与时间胶囊 【最小生成树】*
BZOJ2753 SCOI2012 滑雪与时间胶囊 Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有 ...
- Bzoj2753 [SCOI2012]滑雪与时间胶囊
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2282 Solved: 796 Descriptio ...
- 【BZOJ】【2753】【SCOI2012】滑雪与时间胶囊
Kruskal/最小树形图 然而蒟蒻并不会做这题>_> 本来以为是有向图最小生成树,即最小树形图,但这数据范围有点…… 膜拜了zyf的题解:http://www.cnblogs.com/z ...
- BZOJ 2753 [SCOI2012] 滑雪和时间胶囊 最小生成树
题目链接: 题目 2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB 问题描述 a180285非常喜欢滑雪.他来到一座雪山, ...
- bzoj 2753: [SCOI2012]滑雪与时间胶囊 -- 最小生成树
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB Description a180285非常喜欢滑雪.他来到一座雪山,这 ...
- CDOJ 42/BZOJ 2753 滑雪与时间胶囊 kruskal
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1376 Solved: 487[Submit][St ...
- 【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2457 Solved: 859 Descriptio ...
- 2753: [SCOI2012]滑雪与时间胶囊
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2633 Solved: 910 Descriptio ...
- 【最小树形图(奇怪的kruskal)】【SCOI 2012】【bzoj 2753】滑雪与时间胶囊
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB Submit: 1621 Solved: 570 Description ...
随机推荐
- 前端跨域之jsonp跨域
jsonp跨域原理 原理:因为通过script标签引入的js是不受同源策略的限制的(比如baidu.com的页面加载了google.com的js).所以我们可以通过script标签引入一个js或者一个 ...
- 编写一个 Chrome 浏览器扩展程序
浏览器扩展允许我们编写程序来实现对浏览器元素(书签.导航等)以及对网页元素的交互, 甚至从 web 服务器获取数据,以 Chrome 浏览器扩展为例,扩展文件包括: 一个manifest文件(主文件, ...
- Dozer数据对象转换神器
Dozer数据对象转换神器
- DOM读取和修改节点对象属性
一.获取和修改元素间的内容(3种) 1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文 固定套路:1.删除父元素下所有子元素:parent.innerHTML="&q ...
- MDK stm32 仿真
直接选择simulator,仿真时报错 *** error 65: access violation at 0x40021000 : no 'read' permission 修改系统配置,原配置如下 ...
- CentOS 7 主机加固手册-下
CentOS 7 主机加固手册-上 CentOS 7 主机加固手册-中 CentOS 7 主机加固手册-下 0x1f 删除禁用非必要的服务 删除非必要的服务 # Remove yum remove ...
- HDU 4344 大数分解大素数判定
这里贴个模板吧.反正是不太理解 看原题就可以理解用法!! #include <cstdio> #include <iostream> #include <algorith ...
- ZOJ 3599 K倍动态减法游戏
下面的文字辅助理解来自http://blog.csdn.net/tbl_123/article/details/24884861 博弈论中的 K倍动态减法游戏,难度较大,参看了好多资料才懵懂! 此题可 ...
- 本地搭建SVN局域网服务器【转】
转自:http://blog.csdn.net/sunbaigui/article/details/8466310 参考链接:http://tortoisesvn.net/docs/nightly/T ...
- Python标准库——collections模块的Counter类
1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...