洛谷 题解 P2502 【[HAOI2006]旅行】
由于此题边数比较小,所以可以先给边排个序,然后跑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]旅行】的更多相关文章
- luogu题解P2502[HAOI2006]旅行--最小生成树变式
题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...
- P2502 [HAOI2006]旅行——暴力和并查集的完美结合
P2502 [HAOI2006]旅行 一定要看清题目数据范围再决定用什么算法,我只看着是一个蓝题就想到了记录最短路径+最小生成树,但是我被绕进去了: 看到只有5000的边,我们完全可以枚举最小边和最大 ...
- P2502 [HAOI2006]旅行
P2502 [HAOI2006]旅行有些问题光靠直觉是不靠谱的,必须有简单的证明,要么就考虑到所有情况.这个题我想的是要么见最小生成树,要么建最大生成树,哎,我sb了一种很简单的情况就能卡掉在最小生成 ...
- 洛谷P2501 bzoj1049 [HAOI2006]数字序列
题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- DP【洛谷P2134】 百日旅行
[洛谷P2134] 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场 ...
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
随机推荐
- HTTP权威指南与图解HTTP读书笔记
目录 第1章 HTTP概述 1.1 Web客户端和服务器 1.2 资源 1.2.1 URI 1.2.2 URL 1.2.3 URN 1.3 事务 1.3.1 方法 1.3.2 状态码 1.3.3 We ...
- MongoDB 运维实总结
一.MongoDB 集群简介 MongoDB是一个基于分布式文件存储的数据库,其目的在于为WEB应用提供可扩展的高性能数据存储解决方案.下面将以3台机器介绍最常见的集群方案.具体介绍,可以查看官网 h ...
- python 赋值魔法
序列解包: >>> x,y,z = 1, 2, 3>>> print(x, y, z)1 2 3 >>> a,b, *reset = [1,2,3 ...
- AtCoder Beginner Contest 132
目录 Contest Info Solutions A. Fifty-Fifty B. Ordinary Number C. Divide the Problems D. Blue and Red B ...
- c实现循环链表
解决约瑟夫环问题核心步骤: 1.建立具有n个节点.无头的循环链表 2.确定第一个报数人的位置 3.不断从链表中删除链节点,直到链表为空 #include <iostream> #inclu ...
- C语言学习笔记11- 文件I/O
C语言学习笔记11- 文件I/O ..待编辑 文件操作(CRT.C++.WIN API.MFC)
- [shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即sh ...
- hive 调优(一)coding调优
本人认为hive是很好的工具,目前支持mr,tez,spark执行引擎,有些大公司原来封装的sparksql,开发py脚本,但是目前hive支持spark引擎(不是很稳定,建议Tez先),所以离线还是 ...
- easyui的combobox模糊搜索
<tr> <th>测试名称:</th> <td> <select data-options="" class="ea ...
- Embedded based learning
简单整理了一些嵌入式底层需要接触的相关概念. # CPU CU. Control Unit. send need-clac-data -> ALU clac -> get resul ...