BZOJ-1050-[HAOI2006]旅行comf(并查集)
Description
Input
Output
Sample Input
4 2
1 2 1
3 4 2
1 4
【样例输入2】
3 3
1 2 10
1 2 5
2 3 8
1 3
【样例输入3】
3 2
1 2 2
2 3 4
1 3
Sample Output
IMPOSSIBLE
【样例输出2】
5/4
【样例输出3】
2
题解
这道题给你s和t,要你求s到t的所有条路径上的 最大值比最小值 的最小值
刚开始我以为任意一条u到v的路径在连接的时候只能出现一条,后来发现其实可以多条
我们可以将每条边从大到小排序一遍
每次枚举边,再枚举各条比它大的边,每次加入的时候,用并查集合并,判断一下find(s)和find(t)是否相同即可
#include<bits/stdc++.h>
#define N 505
#define M 5005
using namespace std;
int n,m,s,t,ans1,ans2;
int fa[N];
bool flag;
struct node{
int x,y,z;
}a[M];
bool cmp(node x,node y){ return x.z>y.z; }
int find(int x){ if (x!=fa[x]) fa[x]=find(fa[x]); return fa[x]; }
int gcd(int a,int b){ if (!(a%b)) return b; else return gcd(b,a%b); }
int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
scanf("%d%d",&s,&t);
sort(a+,a++m,cmp);
ans1=; ans2=;
for (int i=;i<=m;i++){
for (int j=;j<=n;j++) fa[j]=j;
for (int j=i;j>=;j--){
int f1=find(a[j].x),f2=find(a[j].y);
if (f1!=f2) fa[f1]=f2;
if (find(s)==find(t)){
if (ans1*a[i].z>a[j].z*ans2){
ans1=a[j].z;
ans2=a[i].z;
flag=true;
break;
}
}
}
}
if (!flag) puts("IMPOSSIBLE"); else{
int d=gcd(ans1,ans2);
if (ans1%ans2) printf("%d/%d\n",ans1/d,ans2/d);
else printf("%d\n",ans1/ans2);
}
return ;
}
BZOJ-1050-[HAOI2006]旅行comf(并查集)的更多相关文章
- BZOJ 1050: [HAOI2006]旅行comf( 并查集 )
将edge按权值排序 , O( m² ) 枚举边 , 利用并查集维护连通信息. ------------------------------------------------------------ ...
- BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
这是建空间后做的第一道题啊= =好水 排序,枚举最小边,然后并查集求出联通时的最大边 或者排次序,从小到大插边,如果插边时最小的边拿掉不会使s与t不联通,就删去。 code: #include< ...
- BZOJ 1050 [HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 976[Submit][Sta ...
- 【BZOJ1050】[HAOI2006]旅行comf 并查集
[BZOJ1050][HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<300 ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- bzoj 1050 [HAOI2006]旅行comf (并查集)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集 ...
- bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】
m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...
- 1050. [HAOI2006]旅行【并查集+枚举】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...
随机推荐
- java中的ArrayList 使得集合中的对象不重复
JAVA中的List接口存放的元素是可以重复的,在这个我重写对象里面的equals()方法,让集合里存放的对象不能重复 首先建一个类,在里面的main()方法中实现 list1中存放的是可以重复对象的 ...
- websocket实现简单聊天程序
程序的流程图: 主要代码: 服务端 app.js 先加载所需要的通信模块: var express = require('express'); var app = express(); var htt ...
- 详解java设计模式之责任链模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...
- 基于NIOS-II的示波器:PART1 按键&显示屏驱动&界面
NIOS II 相关资料以及基础入门 <NiosII的奇幻漂流> <Nios II那些事儿> 本文所有的硬件基础以及工程参考来自魏坤示波仪,重新实现驱动并重构工程. 基于NIO ...
- 数据结构学习:KMP模式匹配算法
有关KMP的算法具体的实现网上有很多,不具体阐述.这里附上c的实现. 谈谈我自己的理解.KMP相较于朴素算法,其主要目的是为了使主串中的遍历参数i不回溯,而直接改变目标串中的遍历参数j. 比如说要是目 ...
- asp.net MVC下使用rest
前言 最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送,那么我将用实用的角度来全面的讲解一下它的使用方法 一.创建rest服务 首先创建一个Asp.Ne ...
- 浏览器事件window.onload、o…
原文地址:浏览器事件window.onload.onfocus.onblur.onscroll和resize作者:lilyxiao <html> <head> <titl ...
- 转:深入Java集合学习系列:HashSet的实现原理
0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...
- 验证Oracle收集统计信息参数granularity数据分析的力度
最近在学习Oracle的统计信息这一块,收集统计信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, ---所有者名字 tabname ...
- jq分页插件,支持动态,静态分页的插件,简单易用。
工作中经常要用到分页功能.为了方便封装了一个比较通用的分页插件开源出来了,简单易用. 官网:https://cwlch.github.io/Ch_Paging 下载地址:https://github. ...