1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 976[Submit][Status][Discuss] Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小.如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输…
将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ----------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream>   #define rep( i , n ) for(…
题意 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在该公路上行驶.最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比 最小的路径.s和t不可能相同. 1<N<=500,1<=x,y<=N,0<v<30000,0<M<=5000 思路 首先把边按边权排序枚举第一条边是哪条,之后从这条边开始Kruskal,直到S与T联通或所有边都用完因为最小生成树可以保证最大…
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.lydsy.com/JudgeOnline/problem.php?id=1050 codevs.cn:http://codevs.cn/problem/1001/ 题目描述就放bzoj的(主要是为了配合标题)(ps:codevs和bzoj的题目描述不一样). Description 给你一个无向图,…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集里,如果得到的比值比之前的小,那么判断下s与t能否连通,如果连通就替换就好了 实现代码: #include<bits/stdc++.h> using namespace std; ; int f[M],vis[M],a[M]; int n,m; int Find(int x){ if(x==f[x…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1050 因为还有Impossible的情况,所以想到了kruscal.(?) 但好像不太行.然后一直没思路. 然后想到因为一共5000条边,可以m^2枚举比值.枚举到一个比值其实就是限制能连的边是那两条边之间的边. 经Zinn提醒得知不用枚举两条边,枚举一条即可. 为什么自己的程序那么慢? #include<iostream> #include<cstdio> #include…
这是建空间后做的第一道题啊= =好水 排序,枚举最小边,然后并查集求出联通时的最大边 或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。 code: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; struct node{     int x,y,dist; }a[5010]; int n,m…
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最大边和最小边的比值最小.如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个 比值,如果需要,表示成一个既约分数. 备注: 两个顶点之间可能有多条路径. Input 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在…
m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=5005; int n,m,f[N],s,t; double ax=30001,ay=1; struct…
1050: [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小.如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值,如果需要,表示成一个既约分数. 备注: 两个顶点之间可能有多条路径. Input 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点…