由于此题边数比较小,所以可以先给边排个序,然后跑m遍最小生成树,每跑一次删除一条边,找最优解。

  • 防TLE技巧

把边按从小到大的顺序排好,那么只要当前无法联通,那么后面也无法联通

  • 最优解找法
double tmp=(1.0*e[i].w)/(1.0*e[j].w);
//因为边是有序的,所以当前的第一条边是最大的,保证能联通的最后一条边就是最小的(详细的自己理解)
if(tmp<ans) a=e[i].w,b=e[j].w,ans=tmp;
//与当前的最优解进行比较
  • 分数的处理技巧

设a和b是最后的结果,那么当b能整除a时,直接输出商

否则就求一遍最大公约数,把a与b分别除以这个最大公约数,输出结果

代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=500+10;
const int MAXM=5000+10;
int n,m,s,t;
struct Node
{
int u,v,w;
}edge[MAXM];
int f[MAXN];
int ans1,ans2;
inline int find(int k)
{
if(f[k]==k)return k;
else return f[k]=find(f[k]);
}
inline bool cmp(Node u,Node v)
{
return u.w<v.w;
}
inline void init()//每次的并查集初始化
{
for(int i=1;i<=n;i++)f[i]=i;
}
inline int read()
{
int tot=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
tot=tot*10+c-'0';
c=getchar();
}
return tot*f;
}
inline int gcd(int x,int y)//求最大公约数
{
if(y>x)return gcd(y,x);
if(y==0)return x;
return gcd(y,x%y);
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;i++)
{
edge[i].u=read();
edge[i].v=read();
edge[i].w=read();
}
s=read();t=read();
sort(edge+1,edge+1+m,cmp);
int now;
for(int i=1;i<=m;i++)
{
init();
/*for(int i=1;i<=n;i++)cout<<f[i]<<" ";
cout<<endl;*/
for(now=i;now<=m;now++)
{
int fx=find(edge[now].u),fy=find(edge[now].v);
//cout<<fx<<" "<<fy<<endl;
if(fx==fy)continue;
f[fx]=fy;
if(find(s)==find(t))break;
}
/*for(int i=1;i<=n;i++)cout<<f[i]<<" ";
cout<<endl;*/
if(i==1&&find(s)!=find(t))
{
cout<<"IMPOSSIBLE\n";
return 0;
}
if(find(s)!=find(t))break;
if(ans1*edge[i].w>=ans2*edge[now].w)ans1=edge[now].w,ans2=edge[i].w;
}
//cout<<ans1<<" "<<ans2<<endl;
if(ans2%ans1==0)
{
cout<<ans2/ans1<<endl;
return 0;
}
int gcdd=gcd(ans1,ans2);
cout<<ans1/gcdd<<"/"<<ans2/gcdd<<endl;
return 0;
}

洛谷 题解 P2502 【[HAOI2006]旅行】的更多相关文章

  1. luogu题解P2502[HAOI2006]旅行--最小生成树变式

    题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...

  2. P2502 [HAOI2006]旅行——暴力和并查集的完美结合

    P2502 [HAOI2006]旅行 一定要看清题目数据范围再决定用什么算法,我只看着是一个蓝题就想到了记录最短路径+最小生成树,但是我被绕进去了: 看到只有5000的边,我们完全可以枚举最小边和最大 ...

  3. P2502 [HAOI2006]旅行

    P2502 [HAOI2006]旅行有些问题光靠直觉是不靠谱的,必须有简单的证明,要么就考虑到所有情况.这个题我想的是要么见最小生成树,要么建最大生成树,哎,我sb了一种很简单的情况就能卡掉在最小生成 ...

  4. 洛谷P2501 bzoj1049 [HAOI2006]数字序列

    题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...

  5. 洛谷P1027 Car的旅行路线

    洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  6. DP【洛谷P2134】 百日旅行

    [洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...

  7. 洛谷 题解 UVA572 【油田 Oil Deposits】

    这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...

  8. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  9. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

随机推荐

  1. 本地启动服务,两个进程分别监听两个端口,导致两个 URL 不同

    问题描述: 本地启了两个服务:A(http://localhost:8001) B(http://localhost:8000),A 项目要怎么才能关联到 B 项目,也就是 A 项目请求怎么跳到 B ...

  2. rect dict tect 词根助记

    rect: r (跑)e(E 槽子)ct(不停的跑)  就是直的 dict:  d(椅子)i(人)C(开口说)t(T 桌子)  : 椅子前站人 开口说前面是桌子 tect: tt(TT像盖子)EC(E ...

  3. PHP mysqli_commit() 函数

    关闭自动提交,做一些查询,然后提交查询: <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localh ...

  4. Oracle 进程 前台进程-服务进程

    一.什么是服务进程(前台进程) 当用户运行一个应用进程时,系统会为用户运行的应用建立一个用户程序,该进程通过某种方式启动一个服务器进程(前台进程),用于处理连接到该实例的用户进程的请求. 二.服务进程 ...

  5. 安装包设计-------卸载(MFC)---------知识总结

    1.删除目录及其下所有文件 bool MyDeleteFile(CString Path) { // SHFILEOPSTRUCT FileOp={0}; // FileOp.fFlags = FOF ...

  6. 在做nios ii uart232 实验时出现undefined reference to `fclose'等错误。

    程序如下 #include<stdio.h> #include<string.h> #include "system.h"   int main () { ...

  7. Java面向对象6(AA ~ AE)

    AE  简单的复数运算(类和对象) (SDUT 4303) import java.util.*; class Complex { int a, b; Complex() { } Complex(in ...

  8. 8月清北学堂培训 Day5

    今天是杨思祺老师的讲授~ 最短路练习题: POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...

  9. python 安装 pyHook

    下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...

  10. Echarts案例-折线图

    一:先在官网下载 https://www.echartsjs.com/zh/download.html 然后再建立工程,导入这两个包: 写代码: <!DOCTYPE html> <h ...