博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
阅读量:5288 次
发布时间:2019-06-14

本文共 1279 字,大约阅读时间需要 4 分钟。

这是建空间后做的第一道题啊= =好水

排序,枚举最小边,然后并查集求出联通时的最大边

或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。

 

code:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using
namespace
std;
struct
node{
    
int
x,y,dist;
}a[5010];
int
n,m,s,t,f[510],ansi,ansa;
bool
cmp(node x,node y){
return
x.dist<y.dist;}
int
find(
int
x){
if
(x!=f[x]) f[x]=find(f[x]);
return
(f[x]);}
int
gcd(
int
x,
int
y){
    
if
(!y)
return
x;
    
return
gcd(y,x %y);
}
int
main(){
    
scanf
(
"%d%d"
,&n,&m);
    
for
(
int
i=1;i<=m;i++)
scanf
(
"%d%d%d"
,&a[i].x,&a[i].y,&a[i].dist);
    
sort(a+1,a+1+m,cmp);
    
scanf
(
"%d%d"
,&s,&t);
    
ansi=a[1].dist;ansa=40000;
    
for
(
int
i=1;i<=n;i++) f[i]=i;
    
for
(
int
i=1;i<=m;i++) {
        
int
x=find(a[i].x),y=find(a[i].y);
        
if
(x!=y) f[x]=y;
        
x=find(s);y=find(t);
        
if
(x==y) {
            
ansa=a[i].dist;
            
break
;
        
}
    
}
    
if
(ansa==40000) {
printf
(
"IMPOSSIBLE\n"
);
return
0;}
    
for
(
int
i=2;i<=m;i++) {
        
for
(
int
j=1;j<=n;j++) f[j]=j;
        
for
(
int
j=i;j<=m;j++) {
            
int
x=find(a[j].x),y=find(a[j].y);
            
if
(x!=y) f[x]=y;
            
x=find(s);y=find(t);
            
if
(x==y) {
                
if
(ansa*1.0/ansi>a[j].dist*1.0/a[i].dist) {ansa=a[j].dist;ansi=a[i].dist;}
                
break
;
            
}
        
}
    
}
    
int
t=gcd(ansa,ansi);
    
if
(ansa*1.0/ansi==ansa/ansi)
printf
(
"%d\n"
,ansa/ansi);
    
else
printf
(
"%d/%d"
,ansa/t,ansi/t);
    
return
0;
}

 

转载于:https://www.cnblogs.com/New-Godess/p/4348966.html

你可能感兴趣的文章
HDU 6619 Horse 斜率优化dp
查看>>
01分数规划
查看>>
visual studio code 中 Java Swing 代码提示不全解决
查看>>
二分查找算法
查看>>
window环境下 恢复odoo数据库备份文件时产生的 Database restore error: Command `psql` not found....
查看>>
Vue中watch的简单应用
查看>>
前端防止url输入地址直接访问页面
查看>>
vue解决刷新时闪烁
查看>>
常用Form表单正则表达式
查看>>
v-text和v-html的区别
查看>>
_self.$scopedSlots.default is not a function报错
查看>>
['1', '2', '3'].map(parseInt) what & why ?
查看>>
43 道检验基础的 JavaScript 面试题
查看>>
Webstorm轻松部署项目至服务器
查看>>
ueditor的初始化赋值
查看>>
点击导航平滑滚动到指定锚点
查看>>
CF387B 【George and Round】
查看>>
CF450A 【Jzzhu and Children】
查看>>
CF171C 【A Piece of Cake】
查看>>
CF39H 【Multiplication Table】
查看>>