算法:并查集

难度:NOIP

题解:

将所有边权从小到大排序,正序枚举最小边,在以第i条边为最短边的情况下,枚举j(权值比i大的边),用并查集维护全图的连通性,如果s,t已经连通,并且做到可以更新答案,那么就可以break了,因为继续枚举j是没有意义的,计算出的答案一定比现在的答案大(因为我们之前把边权从小到大排序了!)。这样我们通过枚举以i为最短边,维护s,t连通性,完美的求出了最优解!

时间复杂度:

代码如下:

居然因为gcd敲错了调了30min<"????">

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define ll long long
#define N 5005
using namespace std;
struct node
{int x,y,v;
}edg[N];
int cmp(node x,node y)
{return x.v<y.v;
}
int fa[N];
int findf(int x)
{if(x==fa[x]) return x;return fa[x]=findf(fa[x]);
}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i = 1;i <= m;i++){scanf("%d%d%d",&edg[i].x,&edg[i].y,&edg[i].v);}sort(edg+1,edg+1+m,cmp);int s,t,minn=0,maxn=0;double ans=999999999.0000;scanf("%d%d",&s,&t);for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){fa[j]=j;}for(int j = i;j <= m;j++){int t1=findf(edg[j].x);int t2=findf(edg[j].y);if(t1!=t2){fa[t1]=t2;}if(findf(s)==findf(t)){if((double)edg[j].v/edg[i].v<ans){ans=(double)edg[j].v/edg[i].v;minn=edg[i].v;maxn=edg[j].v;break; }}}}if(!maxn) puts("IMPOSSIBLE");else {int gd=gcd(minn,maxn);if(minn/gd!=1) printf("%d/%d",maxn/gd,minn/gd);else printf("%d\n",maxn/gd);}return 0 ;
}

bzoj 1050: [HAOI2006]旅行comf(并查集)相关推荐

  1. BZOJ 1050 [HAOI2006]旅行comf(并查集)

    1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000). ...

  2. [并查集]BZOJ 1050——[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf 题目描述 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S ...

  3. bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3335  Solved: 1852 [Submit][ ...

  4. BZOJ 1050 HAOI2006 旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3715  Solved: 2070 [Submit][ ...

  5. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  6. bzoj1050 [HAOI2006]旅行comf(并查集)

    要求路径上最大边与最小边比值的最小值.我们知道,如果固定最小值,最大值越接近最小值,他们的比值越小.因此我们可以采用类似bzoj3454的方法,把所有边从小到大排序,枚举最小值,再枚举最大值,用并查集 ...

  7. BZOJ 1050 [HAOI2006]旅行comf(最小生成树)

    题意 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在该公路上行驶.最后一行包含两个正整数s,t,表示想知道从景点s到 ...

  8. BZOJ 1050: [HAOI2006]旅行comf

    Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3380 Solved: 1877 Description 给你一个无向图,N(N<=500)个顶 ...

  9. HYSBZ - 1050(旅行comf 并查集Java实现)

    HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...

最新文章

  1. c++一些常见的知识点
  2. 畅捷通携手易后台,专注小微企业财税服务
  3. 支付宝支付 第四集:配置类的定义和注入
  4. VC++ 2012 单元测试入门
  5. 计算机c盘d盘不显示了怎么办,我的电脑打开里头的C盘D盘的图标怎么显示不了啊......
  6. 持续集成工具jenkins的部署--Windows篇
  7. android开源系统brvah,Android Jetpack之通用Adapter(Databinding+BRVAH)
  8. 计组之指令系统:1、指令系统概述(定义、分类、格式、扩展操作码指令格式)
  9. FireBug调试工具笔记
  10. C语言课后习题(30)
  11. 解析WeNet云端推理部署代码
  12. wap移动网页开发rem用法
  13. 酷炫好玩又实用 | 可能是CES上六个最值得买的电子产品
  14. 数据挖掘与数据分析好书推荐
  15. Ubuntu 16.04.4 LTS下安装JDK
  16. RabbitMQ-C客户端使用说明
  17. jacob调用word宏
  18. 全球与中国烧碱片市场深度研究分析报告
  19. pdf加页码java_Java 添加页码到PDF文档
  20. C#中包含英文月份的美式日期输出格式

热门文章

  1. 《国际结算》期末试卷及参考答案
  2. python编辑elif显示错误_Python if / elif语法错误…为什么
  3. 绝对真理的内涵、架构与印证
  4. 触动心灵的十句诗,不看悔死你
  5. exit在python中是什么意思_Python中exit()和sys.exit()之间的区别
  6. 常见信息安全威胁与防范以及安全防御未来的发展趋势
  7. 机器学习笔记10——应用机器学习算法的建议
  8. java 透明对话框_java实现jframe透明窗体示例
  9. 【微信小程序】电商移动前端API文档
  10. 华为通信/网络方面的笔试题——电信基础知识题库2