bfs+最小树形图+kruskal算法。

最小树形图形象地来说就是有向图的最小生成树,这个不能拿kruskal算法或者是prim算法直接求,否则会错。

就是w[u][v]!=w[v][u]的情况。

而这道题用朱刘算法肯定是行不通的。

但是这道题的有向边并不是边的性质,而是点的高度决定的。这样我们就可以分层求最小生成树。

如果加进高度为h的点,只需用kruskal算法选最短的边就可以了,而且不会影响到后面的选择。

于是我们把kruskal算法的排序改成以结尾点高度为第一关键字降序和边长度为第二关键字升序排序。。。(意会,要不看cmp,嗯。)

这样就可以辣。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 100000 + 10;
const int maxm = 2000000 + 10;int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}struct Edge {int u,v,d;
}e[maxm];int h[maxn],f[maxn];
int g[maxn],v[maxm],next[maxm],eid;
int res1,n,m;
long long res2;
bool vis[maxn];
int q[maxm],l,r,u;void addedge(int a,int b) {v[eid]=b; next[eid]=g[a]; g[a]=eid++;
}bool cmp(Edge a,Edge b) {if(h[a.v]!=h[b.v]) return h[a.v]>h[b.v];return a.d<b.d;
}int find(int x) {return f[x]==x?x:f[x]=find(f[x]);
}    int main() {memset(g,-1,sizeof(g));n=read(); m=read();for(int i=1;i<=n;i++) h[i]=read();for(int i=1,u,v;i<=m;i++) {        u=read(); v=read(); e[i].d=read();if(h[u]>=h[v]) addedge(u,v);if(h[v]>=h[u]) {addedge(v,u); swap(u,v);}e[i].u=u; e[i].v=v;}sort(e+1,e+m+1,cmp);vis[q[r++]=1]=1,res1=1;while(l<r) {u=q[l++];for(int i=g[u];~i;i=next[i]) if(!vis[v[i]]) {vis[q[r++]=v[i]]=1;res1++;}}for(int i=1;i<=n;i++) f[i]=i;for(int i=1,ru,rv;i<=m;i++) if(vis[e[i].u]&&vis[e[i].v]) {ru=find(e[i].u);rv=find(e[i].v);if(ru!=rv) {res2+=e[i].d;f[rv]=ru;}}printf("%d %lld\n",res1,res2);return 0;
}

转载于:https://www.cnblogs.com/invoid/p/5635995.html

bzoj2753: [SCOI2012]滑雪与时间胶囊相关推荐

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

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

  2. 【codevs2399】【BZOJ2753】滑雪与时间胶囊,bfs+最小生成树

    滑雪与时间胶囊 2012年省队选拔赛四川 时间限制: 5 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description a180285 非常喜欢滑雪.他 ...

  3. 牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊

    链接: 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 a180285非常喜欢滑雪.他来到 ...

  4. [SCOI2012]滑雪与时间胶囊

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

  5. 滑雪与时间胶囊 题解 BZOJ2753

    真是受不了啊~~~ 说好的NOIP"摸你赛"结果出了个四川省选的题.......然后,就没有然后了 不说了,上题目! [SCOI2012]滑雪与时间胶囊 Description a ...

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

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

  7. P2573 [SCOI2012]滑雪(kruskalbfs)

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

  8. 洛谷 P2573 [SCOI2012]滑雪

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

  9. [SCOI2012]滑雪 (最小生成树 Kruskal)

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

最新文章

  1. R语言绘制生存曲线图
  2. 剑指offer第41题 和为s的两个数
  3. selenium环境配置
  4. 点击链接微信html代码怎么写,html5微信分享代码怎么写呢?
  5. nginx转发图片请求变成html/text_教你使用nginx部署网站教程
  6. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized
  7. 新iPhone全贴合保护壳曝光:“浴霸”造型恐已成定局
  8. html 动画过度转换的用法,css(动画,过渡,转换)
  9. rac节点频繁重启的问题分析
  10. JDK6升级JDK8踩雷
  11. 郭天祥51单片机笔记(一)
  12. 查询各科成绩最高分、最低分和平均分
  13. 安卓11:android studio出现:Executing tasks: [:app:assembleDebug] in project D:\Android studio\New start
  14. 软件测试转行做产品经理,转型产品经理,测试工程师的出路!
  15. Android圆形头像图Circle ImageView
  16. 化学公式编辑器怎么画聚合物?
  17. CMD打开IIS,重启iis等
  18. 深入浅出Java 23种设计模式,最全PDF版本终于开放下载了!!(文末有福利)
  19. 如何下载Ubuntu镜像
  20. 《计算机组成原理》大题必考!

热门文章

  1. java MD5加密
  2. eclipse 面包屑开关 / 查看class再哪个jar中
  3. char类型是多少 mat_这轮面试,居然只有20%的人了解 MAT 神器
  4. c语言case的应用,switch、case的使用
  5. PHP堆实现TopK算法实例,top-k 算法浅析
  6. java spring工作原理_SpringMVC的工作原理是什么样的,跟Spring的关系是怎么样的?
  7. ckks方案优化最好的_果断收藏:SEO高级优化技能升级策略!
  8. 计算机英语阅读理解,2017年12月英语四级阅读理解50篇:学习计算机
  9. win7安装mysql 5.7.25_Windows下安装mysql-5.7.25-winx64.zip
  10. 拍摄中如何判断灰度等级_如何判断电力铁塔的电压等级?每个人都应知道