题目链接

其实没有辣么难,

暴力枚举最小边是哪条边,然后每次跑一边最小生成树,

当$s,t$刚好联通时最后加的边的权值就是当前的最大边最小的情况

然后判断一下,更新答案就好

/**************************************************************
Problem: 1050
User: zhangheran
Language: C++
Result: Accepted
Time:2656 ms
Memory:2072 kb
****************************************************************/ #include<iostream>
#include<cstdio>
//#include"suqingnian.h"
#include<algorithm>
using namespace std; template<typename _Element_gcd>
_Element_gcd
_gcd(_Element_gcd _m, _Element_gcd _n)
{
while (_n != )
{
_Element_gcd _t = _m % _n;
_m = _n;
_n = _t;
}
return _m;
} int n,m;
struct data{
int u;int v;int value;
friend bool operator <(const data &a,const data &b) {return a.value<b.value;}
}edge[];int cnt;
void add(int u,int v,int value)
{
edge[++cnt].u=u;
edge[cnt].v=v;
edge[cnt].value=value;
return ;
} int fa[];
inline void build() {for(int i=;i<=n;i++) fa[i]=i;return ;}
int find(const int &x) {return fa[x]==x?x:fa[x]=find(fa[x]); }
inline bool check(const int &a,const int &b) {return find(a)==find(b);}
inline void merge(const int &x,const int &y) {fa[fa[x]]=fa[y]; return ;} int u,v,value;
int s,t;int ans1,ans2;
int now1,now2,num;
bool book=;bool ins;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++) scanf("%d%d%d",&u,&v,&value),add(u,v,value);
scanf("%d%d",&s,&t);
sort(edge+,edge+m+);
for(int i=;i<=m;i++){
build();now1=edge[i].value;ins=false;
for(int j=i;j<=m;j++)
if(!check(edge[j].u,edge[j].v)){
merge(edge[j].u,edge[j].v);
if(check(s,t)){now2=edge[j].value;book=true;ins=true;break;}
}
if(ins){
if(ans1==||now1*ans2>ans1*now2) ans1=now1,ans2=now2;
if(ans1!=&&ans2!=)num=_gcd(ans1,ans2),ans1/=num,ans2/=num;}
}
if(!book){puts("IMPOSSIBLE");return ;}
if(ans2==) {puts("");return ;}
num=_gcd(ans1,ans2);
ans1/=num,ans2/=num;
if(ans1==) {printf("%d",ans2);return ;}
printf("%d/%d",ans2,ans1);
return ;
}

bzoj1050旅行的更多相关文章

  1. BZOJ-1050 旅行comf 并查集+乱搞

    好久以前codevs上做过的,拿着改了改.. 1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2194 S ...

  2. BZOJ1050 旅行comf(kruskal)

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

  3. bzoj1050 旅行

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

  4. 【BZOJ1050】[HAOI2006]旅行

    [BZOJ1050][HAOI2006]旅行 题面 bzoj 洛谷 题解 先将所有边从小往大排序 枚举钦定一条最小边 再枚举依次枚举最大边,如果两个点联通了就\(break\)统计答案即可 代码 #i ...

  5. 【BZOJ1050】[HAOI2006]旅行comf 并查集

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

  6. 【bzoj1050】 旅行comf

    http://www.lydsy.com/JudgeOnline/problem.php?id=1050 (题目链接) 题意 给出一个无向图,求图中两点间某条路径使得最大权值除以最小权值的值最小 So ...

  7. BZOJ1050 HAOI2006旅行(最小生成树+LCT)

    暴力枚举路径中权值最小边是哪个,然后求出边权不小于它的边的最小生成树,即可保证该路径上最大值最小.暴力当然可以过,这里使用LCT维护.注意数据中有自环. #include<iostream> ...

  8. 【bzoj1050】[HAOI2006]旅行comf

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

  9. bzoj1050【HAOI2006】旅行comf

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

随机推荐

  1. css实现类似heigth:100%的方法

    1. 效果 2. 代码 2.1. Html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  2. 机器学习模型数据结构:logistic regression, neural network, convolutional neural network

    可以用两种方式来看神经网络,一种就是层的集合,也就是层组成的数组,另一种是神经元的集合,也就是神经元组成的Graph. 基于神经元的实现方式中,需要定义两个类 Neuron, Weight Neuro ...

  3. Opencv 发现轮廓 findContours

    vector<vector<Point>> vec_p; vector<Vec4i> vec_4f; findContours(img_canny1, vec_p, ...

  4. eval 是执行一段完整的js字符串代码,并将结果返回

    var strArray="[{"message1":{ "id": "-1","content": &quo ...

  5. C#异步中的Task,async,await

    class Program { static void Main(string[] args) { Console.WriteLine("我是主线程,线程ID:{0}", Thre ...

  6. 处理事件冒泡,阻止默认事件工具类,兼容IE

    //处理事件冒泡,阻止默认事件工具类,兼容IEvar eventUtil={ // 添加句柄 addHandler:function(element,type,handler){ if(element ...

  7. Openssl sess_id命令

    一.简介 sess_id指令是一个调试工具,用来处理SSL_SESSION结构的,可以打印出其中的细节 二.语法 openssl sess_id [-inform PEM|DER] [-outform ...

  8. java之yield(),sleep(),wait()区别详解-备忘笔记[转]

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  9. [C++] const and char*

    const and char* NOTICE:   char  *str = "hello";  the value of str is the address of the fi ...

  10. 1097G Vladislav and a Great Legend

    传送门 分析 https://blog.csdn.net/forever_shi/article/details/88048528 代码 #include<iostream> #inclu ...