先按边长排序,假设s与t连通,那么我们可以枚举s与t的路径中最短的一条边,通过类似与kruskal的方法找到s与t的路径在当前最小边权情况下尽量小的最大边权,用这个比值更新答案。

  特别的,我们对于某一情况,如果循环完边之后s与t不连通可以跳出。在确定了最小边找完最大边的时候,不必要继续枚举最小边+1,可以从最大边开始向前加边,找到最大的边保证s,t连通,且最大边为刚才求得的,更新答案,从这个边继续枚举。这两个为优化。

  反思:判断更新答案的时候手残打错,找了快一个小时才找到错。

  

/**************************************************************
Problem: 1050
User: BLADEVIL
Language: C++
Result: Accepted
Time:772 ms
Memory:868 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#include <algorithm>
#define maxn 600
#define maxm 5010 using namespace std; int n,m,s,t;
int father[maxn];
int ans1,ans2; struct rec
{
int a,b,len;
} c[maxm]; bool cmp(rec a,rec b)
{return (a.len<b.len);} int getfather(int x)
{
if (father[x]==x) return x;
return father[x]=getfather(father[x]);
} int gcd(int x,int y)
{
if (y>x) return gcd(y,x);
if (!y) return x;
return gcd(y,x%y);
} int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++) scanf("%d%d%d",&c[i].a,&c[i].b,&c[i].len);
scanf("%d%d",&s,&t);
sort(c+,c++m,cmp);
for (int i=;i<=m;i++)
{
int j;
for (j=;j<=n;j++) father[j]=j;
for (j=i;j<=m;j++)
{
int fa,fb;
fa=getfather(c[j].a); fb=getfather(c[j].b);
if (fa==fb) continue;
father[fa]=fb;
if (getfather(s)==getfather(t)) break;
}
if ((i==)&&(getfather(s)!=getfather(t)))
{
printf("IMPOSSIBLE\n");
return ;
}
if (getfather(s)!=getfather(t)) break;
if (ans1*c[i].len>=ans2*c[j].len) ans1=c[j].len,ans2=c[i].len;
}
int x=gcd(ans1,ans2);
if (x==ans2) printf("%d\n",ans1/ans2); else printf("%d/%d\n",ans1/x,ans2/x);
return ;
}

最新文章

  1. VS2012 还原默认设置
  2. Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器
  3. 项目管理过程组和知识领域表(PMBOK2008)
  4. Eclipse - 修改默认user和类的创建日期
  5. spring中各jar功能及jar包之间的依赖关系
  6. Linux IPC Pipe
  7. MapReduce的输入输出
  8. C#高级编程(第9版) -C#5.0&amp;.Net4.5.1 书上的示例代码下载链接
  9. 下拉刷新ListView实现原理
  10. MongoDB安装,启动,注册为windows系统服务
  11. uCos 没有延时Tick滴答定时器测试
  12. HDU 3516 Tree Construction (四边形不等式)
  13. SqlServer IF Exists([database]|[table]|[prop]) / Column([Operation])
  14. java中表示二进制、八进制、十进制、十六进制,double、float、整型
  15. WPF子界面向父界面传递带参数的委托
  16. div+css+position实现简单的纵向导航栏
  17. java的反射机制之getDeclaredMethods和getMethods的区别
  18. 对于两个初始时设置为Sensor的刚体,不会触发preSolve和postSolve
  19. CSS中表示大小的单位
  20. iOS CGRectGetMaxX/Y 使用

热门文章

  1. OSG学习:响应键盘鼠标示例
  2. Android studio出现Error:Unable to tunnel through proxy. Proxy returns &quot;HTTP/1.1 400 Bad Request&quot;的解决办法
  3. bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】
  4. 洛谷 P4495 [HAOI2018]奇怪的背包 解题报告
  5. HDOJ.1070 Milk(贪心)
  6. JavaScript中的valueOf与toString方法
  7. 总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)
  8. SELECT LOCK IN SHARE MODE and FOR UPDATE
  9. mysql的主从复制原理与实现
  10. 题解 【luogu P2680 NOIp提高组2015 运输计划】