nyoj 711 枚举+并查集
#include<stdlib.h>//枚举最大的一条边肯定要找和他的值最接近的边,所以要排序
#define N 5100
#define inf 0x3fffffff
struct node {
int u,v,speed;
}map[N];
int gcd(int a,int b) {
if(b==0)
return a;
return gcd(b,a%b);
}
int cmp(const void *a,const void *b) {
return (*(struct node *)b).speed-(*(struct node *)a).speed;
}
int pre[510];
int find(int x) {
if(x!=pre[x])
pre[x]=find(pre[x]);
return pre[x];
}
int main(){
int min,max,mi,ma,i,j,k,tt,t,n,m,s,a,b;
scanf("%d",&tt);
while(tt--) {
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)//
scanf("%d%d%d",&map[i].u,&map[i].v,&map[i].speed);
scanf("%d%d",&s,&t);
max=inf;min=1;//初始化比值为最大
qsort(map,m,sizeof(map[0]),cmp);//排序从大到小
for(i=0;i<m;i++) {
for(j=1;j<=n;j++)
pre[j]=j;
mi=inf;ma=-1;
for(j=i;j<m;j++) {
a=find(map[j].u);
b=find(map[j].v);
if(a!=b) {//如果两个点之间的路径没有加过
pre[b]=a;
if(mi>map[j].speed)//当前路中的最小值
mi=map[j].speed;
if(ma<map[j].speed)//当前路中的最大值
ma=map[j].speed;
}
if(find(s)==find(t))//当前边加入后是否可以联通s-t
break;
}
if(j==m)//如果找不到直接退出
break;
if(max*mi>min*ma) {//更新最小比值
max=ma;
min=mi;
}
}
if(max%min==inf) {//如果没有s-t的路径输出
printf("IMPOSSIBLE\n");
continue;
}
if(max%min==0)
printf("%d\n",max/min);
else {//如果不能整除
k=gcd(max,min);
printf("%d/%d\n",max/k,min/k);
}
}
return 0;
}
nyoj 711 枚举+并查集的更多相关文章
- POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...
- BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
[HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...
- bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】
枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...
- bzoj 1050: [HAOI2006]旅行comf【枚举+并查集】
m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...
- Nyoj 布线问题(并查集&&图论)
描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n ...
- nyoj 1022 合纵连横 (并查集<节点删除>)
合纵连横 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...
- SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
<传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...
- HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)
一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...
- 【BZOJ1050】【枚举+并查集】旅行comf
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
随机推荐
- CodeForces - 735D Taxes (哥德巴赫猜想)
Taxes time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...
- OC常用的数学函数及宏定义
一.函数 1. 三角函数 double sin (double);正弦 double cos (double);余弦 double tan (double);正切 2 .反三角函数 double as ...
- SpringMVC使用POST方法传递数据,却出现Request method 'GET' not supported?
转自:https://segmentfault.com/q/1010000011245770 问题:没有使用get获取当前页面解决方案: @RequestMapping(value = " ...
- Coursera Algorithms week2 基础排序 练习测验: Intersection of two sets
题目原文: Given two arrays a[] and b[], each containing n distinct 2D points in the plane, design a subq ...
- Stockbroker Grapevine(floyd)
http://poj.org/problem?id=1125 题意: 首先,题目可能有多组测试数据,每个测试数据的第一行为经纪人数量N(当N=0时, 输入数据结束),然后接下来N行描述第i(1< ...
- Moco模拟服务器实现请求&响应 (一)
接口测试Moco工具 1.使用Moco模拟,首先需要下载Moco 的jar 包,下载链接: http://central.maven.org/maven2/com/github/dreamhead/m ...
- B - Bit++
Problem description The classic programming language of Bitland is Bit++. This language is so peculi ...
- python3和python2共存 django-admin Fatal error in launcher: Unable to create process using ‘"‘
python3和python2共存 django-admin Fatal error in launcher: Unable to create process using ‘"‘ 出现这个 ...
- ABP的一些特性 (Attribute)
大家应该很熟悉Attribute这个东西吧,ABP里面扩展了一些特性,做过滤权限,返回内容等进行控制,在这里小记下,方便后续查看. [DontWrapResult] //ABP默认对返回结果做了封装 ...
- dubbo之多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用. 可以按照以下的步骤进行版本迁移: 在低压力时间段,先升级一半提供者为新版本 再将所有消费者升级为新版本 然后将剩下的 ...