http://www.lydsy.com/JudgeOnline/problem.php?id=1050 (题目链接)

题意:给出一个无向图,求图中两点间某条路径使得最大权值除以最小权值的值最小

Solution
  今天考试题,写了个萎的dijistra,30分。。。
  正解是最小生成树(其实并不是最小)。我们想让路径中最大的边和最小的边相差尽可能小,也就是说将边按权值从小到大排序后,路径就是序列中连续的一段所组成的生成树。枚举生成树中最小的边,然后往树中加边。当s与t联通时就break,更新答案。复杂度m²。

代码:

// bzoj1050
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
inline LL getint() {int f,x=0;char ch=getchar();while (ch<='0' || ch>'9') {if (ch=='-') f=-1;else f=1;ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;
}const int maxn=5010;
struct edge {int u,v,w;}e[maxn];
int fa[maxn],n,m,s,t;bool cmp(edge a,edge b) {return a.w<b.w;
}
int gcd(int x,int y) {return x%y==0?y:gcd(y,x%y);
}
int find(int x) {return x==fa[x] ? x : fa[x]=find(fa[x]);
}
int main() {scanf("%d%d",&n,&m);for (int i=1;i<=m;i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sort(e+1,e+1+m,cmp);scanf("%d%d",&s,&t);int x1=-1,y1=-1;for (int i=1;i<=m;i++) {if (e[i].w==e[i-1].w) continue; //质的飞越,快的不只一点点for (int j=1;j<=n;j++) fa[j]=j;for (int j=i;j<=m;j++) {int r1=find(e[j].u),r2=find(e[j].v);if (r1!=r2) fa[r1]=r2;if (find(s)==find(t)) {if (y1==-1 || (double)x1/y1>(double)e[j].w/e[i].w) x1=e[j].w,y1=e[i].w;break;}}if (y1==-1) {printf("IMPOSSIBLE");return 0;}}int x=gcd(x1,y1);x1/=x,y1/=x;if (y1==1) printf("%d\n",x1);else printf("%d/%d\n",x1,y1);return 0;
}

【bzoj1050】 旅行comf相关推荐

  1. BZOJ1050 旅行comf(kruskal)

    旅行comf 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大边和最小边 ...

  2. BZOJ1050 旅行comf

    标签:最小生成树,并查集 Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T, ...

  3. 【bzoj1050】[HAOI2006]旅行comf

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

  4. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)

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

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

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

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

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

  7. 【BZOJ 1050】旅行comf

    [题目] 题目传送门旅行comf Description 给你一个无向图,( ≤ 500)个顶点, ( ≤ 5000)条边,每条边有一个权值 ( < 30000).给你两个顶点  和 ,求一条路 ...

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

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

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

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

  10. BZOJ 1050 HAOI2006 旅行comf

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

最新文章

  1. [CF 392 Div.1 D]Three Arrays
  2. Windows 2008 ×××与 CA
  3. 使用LVS+TUN搭建集群实现负载均衡
  4. Android 学习笔记 BroadcastReceiver广播...
  5. defunct 进程占用端口_UAV心跳机制与容器、进程数据采集
  6. shutil模块、json和pickle模块
  7. ​CVPR2021最佳学生论文提名:Less is More
  8. 今晚直播丨2020年全国首场12c OCM直考揭秘
  9. 一次函数的斜率公式_【海广教育数学口诀】初中数学学不会?公式这样记,让你做题效率翻倍!...
  10. mysql 视图报错_MySQL使用Union创建视图报错
  11. vi/Vim的快速使用
  12. oracle会计事件,新的一年打开会计期发生错误
  13. C++解析(3):布尔类型与三目运算符
  14. java不能变成class_java.lang.Class不能转换为java.lang.reflect.ParameterizedType
  15. 一个门外汉的产品设计漫谈
  16. 基于Arduino的智能小车-代码部分
  17. ADC芯片——AD7705最详细讲解(STM32)
  18. 搜狗快照批量更新工具
  19. 如何稳定eBay店铺评分
  20. 电驴 链接不到服务器

热门文章

  1. 我们怎样才能过好这一生?
  2. Android5.0,IDA远程调试 The debugger could not attach to the selected process. irs_recv 等待的操作过时
  3. 就业和工作?毕业生何去何从?
  4. 论文学习笔记——弱监督语义分割(Learning Integral Objects with Intra-Class Discriminator for Weakly-Supervised Sema)
  5. 计算机网络的基础学习
  6. 树莓派用root登陆_树莓派开启root用户权限
  7. Discom BKS03/KS91D传感器
  8. gitlab修改项目名称
  9. RuntimeError: generator raised StopIteration
  10. 6.1 Verbatim环境