zoukankan      html  css  js  c++  java
  • [NOIP 2010] 关押罪犯

    [题目链接]

             https://www.luogu.org/problemnew/show/P1525

    [算法]

             贪心地思考这个问题,我们优先考虑“怒气值”大的罪犯,尝试不将他们分在同一监狱,如果必须分在同一间监狱,那么,就不需考虑其余的罪犯了

             显然,并查集是可以完成这个任务的

    [代码]

            

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 20010
    #define MAXM 100010
    
    struct info
    {
        int u,v,w;
    } a[MAXM];
    
    int i,n,m;
    int fa[MAXN<<1];
    
    inline bool cmp(info a,info b)
    {
        return a.w > b.w;
    }
    inline int get_root(int x)
    {
        if (fa[x] == x) return x;
        return fa[x] = get_root(fa[x]);    
    }
    
    int main()
    {
    
        scanf("%d%d",&n,&m);
        for (i = 1; i <= m; i++) scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
        sort(a+1,a+m+1,cmp);
        for (i = 1; i <= 2 * n; i++) fa[i] = i;
        for (i = 1; i <= m; i++)
        {
            if (get_root(a[i].u) == get_root(a[i].v))
            {
                printf("%d
    ",a[i].w);
                return 0; 
            } else
            {
                fa[get_root(a[i].u)] = get_root(a[i].v+n);
                fa[get_root(a[i].v)] = get_root(a[i].u+n);
            }
        }
        printf("0
    ");
    
        return 0;
    }
  • 相关阅读:
    2072=删数问题
    2872=M--二分查找
    4165=全排列问题
    2805=大家快来A水题
    4148=1.1联结词真值运算
    2748=第X大的数
    3479=青蛙过河
    1200=汉诺塔
    Leetcode92_反转链表II
    Leetcode206_反转链表
  • 原文地址:https://www.cnblogs.com/evenbao/p/9318860.html
Copyright © 2011-2022 走看看