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 qwe
{
int u,v;
double w;
}a[N];
bool cmp(const qwe &a,const qwe &b)
{
return a.w<b.w;
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int zhao(int x)
{
return x==f[x]?x:f[x]=zhao(f[x]);
}
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
a[i].u=read(),a[i].v=read(),a[i].w=read();
s=read(),t=read();
sort(a+1,a+1+m,cmp);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
f[j]=j;
for(int j=i;j<=m;j++)
{
int fu=zhao(a[j].u),fv=zhao(a[j].v);
if(fu!=fv)
{
f[fu]=fv;
if(zhao(s)==zhao(t))
{//cerr<<a[j].w<<" "<<a[i].w<<endl;
if(ax/ay>a[j].w/a[i].w)
ax=a[j].w,ay=a[i].w;
break;
}
}
}
}
if(ax==30001)
puts("IMPOSSIBLE");
else
{
int d=gcd(ax,ay);
if(d==ay)
printf("%d\n",(int)ax/d);
else
printf("%d/%d\n",(int)ax/d,(int)ay/d);
}
return 0;
}

bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】的更多相关文章

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

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集 ...

  2. [BZOJ1050][HAOI2006]旅行comf 枚举+并查集

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1050 将边排序,枚举边权最小的边,依次加边直到S和T连通,更新答案. #include&l ...

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

    将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ------------------------------------------------------------ ...

  4. BZOJ 1050 [HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 976[Submit][Sta ...

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

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

  6. BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)

    这是建空间后做的第一道题啊= =好水 排序,枚举最小边,然后并查集求出联通时的最大边 或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。 code: #include< ...

  7. bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】

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

  8. bzoj 1050 [HAOI2006]旅行comf——kruscal

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1050 因为还有Impossible的情况,所以想到了kruscal.(?) 但好像不太行.然 ...

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

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

随机推荐

  1. Leetcode 150.逆波兰表达式求值

    逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总 ...

  2. HDU-1597find the nth digit,超短代码一遍过,啦啦啦啦~~

    find the nth digit                                                                    Time Limit: 10 ...

  3. SQL SERVER 2012 第三章 T-SQL 基本SELECT语句用法,Where子句详细用法

    select [all|distinct] [top (<expression>) [Percent] [with ties]] <column list> [from < ...

  4. Apache 使用localhost(127.0.0.1)可以访问,使用本机IP(局域网)不能访问

    本机ip是:192.168.1.25,输入后提示: Forbidden You don't have permission to access / on this server 对于此问题的解决办法, ...

  5. [bzoj1014][JSOI2008]火星人prefix_非旋转Treap_hash_二分

    火星人prefix bzoj-1014 JSOI-2004 题目大意:给定一个字符串,支持三种操作:1.查询:两个后缀之间的$LCP$:2.单点修改:3.插入一个字符. 注释:$1\le n\le 1 ...

  6. Binary Tree Preorder Traversal (非递归实现)

    具体思路参见:二叉树的非递归遍历(转) 先序遍历(根左右). 即把每一个节点当做根节点来对待. /** * Definition for binary tree * struct TreeNode { ...

  7. springboot+idea+maven学习第一天(springboot入门,idea整合maven)

    1.springboot简介 简化Spring 用用开发的一个框架: 真个S僻壤技术栈的一个大整合 j2ee开发的一站式解决方案 2.微服务 微服务:是一种架构风格 一个应用应该是一组小型服务:可以通 ...

  8. ibatis中isNotNull与isNotEmpty区别

    isNotNull:参数不能为null,空的可以的 isNotEmpty:参数不能为null和空 那什么是空?比如String类型 String a = ""; a就是空

  9. no matching function transform?

    http://stackoverflow.com/questions/19876746/stdtolower-and-visual-studio-2013 http://forums.codeguru ...

  10. Vue中删除重复上传的文件

    上传控件: <el-upload class="upload-demo"  :on-change="filesChange"> filesChang ...