zoukankan      html  css  js  c++  java
  • POJ

    POJ - 1797 题目链接
    整体来看这道题目和青蛙的那题基本差不多
    不一样的地方就在于,这道题目是只要点1,n连接就行,还有这道题是求最大边权和的最小值(通俗来讲就是最大生成树的最小边权)
    因此这道题我们在sort的时候就一定要安装边权值从大到小排。
    因为吸取了上道题目的经验所以这道题就很简单的ac了。

    //Powered by CK
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N1 = 1e3 + 10, N2 = 1e6 + 10;
    int fa[N1], n, m, ans;
    struct Road {
        int x, y, value;
        bool operator < (const Road & t) const {//默认的sort都是小于号,这里直接把小于号的的定义反转了,也就相当于大于号
            return value > t.value;
        }
    }road[N2];
    void init() {//并查集的初始化操作。
        for(int i = 1; i <= n; i++) fa[i] = i;
    }
    int find(int x) {//查找父节点
        return x == fa[x] ? x : fa[x] = find(fa[x]);
    }
    int main() {
        // freopen("in.txt", "r", stdin);
        int t;
        scanf("%d", &t);
        for(int cas = 1;  cas <= t; cas++) {
            scanf("%d %d", &n, &m);
            for(int i = 0; i < m; i++)
                scanf("%d %d %d", &road[i].x, &road[i].y, &road[i].value);
            sort(road, road + m);
            init();
            for(int i = 0; i < m; i++) {
                int fx = find(road[i].x);
                int fy = find(road[i].y);
                if(fx != fy) {
                    fa[fx] = fy;
                    ans = road[i].value;
                }
                if(find(1) == find(n))  break;//这里一定要注意是find(1) == find(n),不能是fa[1] == fa[n]
            }
            printf("Scenario #%d:
    %d
    
    ",cas, ans);
        }
        return 0;
    }
    
  • 相关阅读:
    SVN服务器搭建和使用(一)
    log4j.properties配置详解
    List<Map>来导出Excel数据
    JavaFX 表格数据显示简单Demo
    Java数组
    oracle数据 在已有的重复的数据上加联合唯一约束
    MyEclipse 9极速优化
    Eclipse中自定义Library
    Python 爬虫 1 (转)
    装修步骤 1
  • 原文地址:https://www.cnblogs.com/lifehappy/p/12610881.html
Copyright © 2011-2022 走看看