zoukankan      html  css  js  c++  java
  • 走亲访友

    坐车最长的时间和坐车最短的时间的比值尽可能的小。

    输入格式:

    第一行输入两个正整数,,分别代表站点的个数以及所有站点之间路的条数。

    接下来的 M行每行包括三个正整数,,

    表示从站点u坐车到站点v需要w单位的时间。当然,从站点v坐车到站点u也需要w单位的时间。

    最后一行输入两个正整数分别代表小丁家所在的站点和小丁姥姥家所在的站点。

    输出格式:

    若不能到达姥姥家,输出 IMPOSSIBLE,否则输出一个数代表最小的时间比。

    如果需要,输出一个最简分数。

    输入样例:

    3 3
    1 2 10
    1 2 5
    2 3 8
    1 3

    输出样例:

    5/4
     
    #include <bits/stdc++.h>
    
    #define int long long
    using namespace std;
    
    int n, m, pre[505], fenzi, fenmu;
    double temp = 0x3f3f3f3f;
    struct edge {
        int s, t, w;
    } e[5005];
    
    void init() {
        for (int i = 1; i <= n; i++)
            pre[i] = i;
    }
    
    int find(int x) {
        if (pre[x] == x)
            return x;
        return pre[x] = find(pre[x]);
    }
    
    void merge(int x, int y) {
        pre[find(x)] = find(y);
    }
    
    int cmp(edge a, edge b) {
        return a.w < b.w;
    }
    
    signed main() {
        //freopen("in", "r", stdin);
        ios::sync_with_stdio(false);
        cin >> n >> m;
        for (int i = 1; i <= m; i++)
            cin >> e[i].s >> e[i].t >> e[i].w;
        sort(e + 1, e + m + 1, cmp);
        int u, v;
        cin >> u >> v;
        for (int i = 1; i <= m; i++) {
            double maxx = -1, minx = 0x3f3f3f3f;
            init();
            for (int j = i; j <= m; j++) {
                merge(e[j].s, e[j].t);
                maxx = max(maxx, 1.0 * e[j].w);
                minx = min(minx, 1.0 * e[j].w);
                if (find(u) == find(v)) {
                    if (maxx / minx < temp) {
                        temp = maxx / minx;
                        fenzi = maxx;
                        fenmu = minx;
                    }
                    break;
                }
            }
        }
        if (temp == 0x3f3f3f3f) cout << "IMPOSSIBLE" << endl;
        else {
            int g = __gcd(fenzi, fenmu);
            fenzi /= g;
            fenmu /= g;
            if (fenmu == 1) cout << fenzi << endl;
            else cout << fenzi << "/" << fenmu << endl;
        }
        return 0;
    }
    View Code

    并查集对关系的维护

    maxx/minn的最小  每种都找一遍 在这之前可以排浩顺序,按照w(毕竟题目就是求的这个)

    剩下的就简单了

     
  • 相关阅读:
    Spring启动流程
    bash脚本
    初识RPC框架
    C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
    MacOS安装vs code并且配置C/C++环境2020
    numpy 数组操作
    numpy索引 切片和迭代
    numpy基础之数据类型
    numpy基础
    Bootstrap Navbar应用及源码解析
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12341983.html
Copyright © 2011-2022 走看看