nyoj 711 枚举+并查集

时间:2023-01-20 09:18:29
 #include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断

#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 枚举+并查集的更多相关文章

  1. POJ 1944 Fiber Communications &lpar;枚举 &plus; 并查集 OR 线段树&rpar;

    题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...

  2. BZOJ 1050: &lbrack;HAOI2006&rsqb;旅行comf(枚举&plus;并查集)

    [HAOI2006]旅行comf Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点 ...

  3. bzoj 4078&colon; &lbrack;Wf2014&rsqb;Metal Processing Plant【二分&plus;2-SAT&plus;枚举&plus;并查集】

    枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...

  4. bzoj 1050&colon; &lbrack;HAOI2006&rsqb;旅行comf【枚举&plus;并查集】

    m是5000,就想到了直接枚举比例 具体做法是是先把边按照边权从小到大排序,然后先枚举最小边权,再枚举最大边权,就是从最小边权里一个一个加进并查集里,每次查st是否联通,联通则退出,更新答案 #inc ...

  5. Nyoj 布线问题&lpar;并查集&amp&semi;&amp&semi;图论&rpar;

    描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有的楼都供上电.2.所用电线花费最少   输入 第一行是一个整数n表示有n组测试数据.(n ...

  6. nyoj 1022 合纵连横 &lpar;并查集&lt&semi;节点删除&gt&semi;&rpar;

    合纵连横 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...

  7. SGU 128&period; Snake --- 暴力枚举&plus;并查集&plus;贪心&plus;计算几何

    <传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...

  8. HDU 1598 find the most comfortable road&lpar;枚举&plus;并查集,类似于最小生成树&rpar;

    一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...

  9. 【BZOJ1050】【枚举&plus;并查集】旅行comf

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...

随机推荐

  1. 使用json把php数据传给js处理

    先创建下面的两个文件,并将代码拷贝进去,然后打开json.html文件: json.html文件: <!DOCTYPE html> <html> <head> &l ...

  2. JavaScript入门篇 第三天(认识DOM)

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  3. SDAutolayout图片大小根据数量变化

    只需要在自定义的PhotoContainerView中做一下判断就可以了 ) { [self setupAutoWidthFlowItems:[temp copy] withPerRowItemsCo ...

  4. 【BZOJ】3809&colon; Gty的二逼妹子序列

    http://www.lydsy.com/JudgeOnline/problem.php?id=3809 题意:n个元素(1<=n<=100000)每个元素有一权值<=n.q个询问, ...

  5. Can jxta be used to develop online card game &lpar;p2p style&rpar;&quest;

    Can jxta be used to develop online card game (p2p style)? https://www.java.net//node/677134 I am new ...

  6. xml处理相关文章收藏

    XPath语法 在C#中使用XPath示例:http://blog.csdn.net/yukaizhao/article/details/6630613 .Net那点事儿系列:C#操作Xml:通过Xm ...

  7. Smarty练习增删改

    <?php //将题目表显示在页面 include("../init.inc.php"); include("../DBDA.php"); $db = n ...

  8. SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异

    在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...

  9. C&plus;&plus; 之 Asio 库

    1  简介  Asio 是一个跨平台的 C++ 库,常用于网络编程.底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2  使用 Asio 2.1  下载  Asio 可分为 ...

  10. c&num;统计代码行数

    小编,已经快学了两年编程了.昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数.老规矩,先上图. 比较惭愧,写了两年只有2万多行.那我们还是进入下一项吧. 界面搭建我 ...