• 洛谷 P1525 关押罪犯 & [NOIP2010提高组](贪心,种类并查集)


    传送门


    解题思路

    很显然,为了让最大值最小,肯定就是从大到小枚举,让他们分在两个监狱中,第一个不符合的就是答案。

    怎样判断是否在一个监狱中呢?

    很显然,就是用种类并查集。

    种类并查集的讲解——团伙(很像的一个题)

    很裸的一个种类并查集。

    当然,也可以用二分+二分图染色来解决。

    AC代码

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 using namespace std;
     5 const int maxn=20005;
     6 const int maxm=100005;
     7 int n,m,f[2*maxn];
     8 struct node{
     9     int a,b,c;
    10     bool operator <(const node x){
    11         return c>x.c;
    12     }
    13 }e[maxm];
    14 int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
    15 int main()
    16 {
    17     cin>>n>>m;
    18     for(int i=1;i<=2*n;i++){
    19         f[i]=i;
    20     }
    21     for(int i=1;i<=m;i++){
    22         scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].c);
    23     }
    24     sort(e+1,e+m+1);
    25     for(int i=1;i<=m;i++){
    26         int fa=find(e[i].a);
    27         int fb=find(e[i].b);
    28         if(fa==fb||find(e[i].a+n)==find(e[i].b+n)){
    29             cout<<e[i].c;
    30             return 0;
    31         }
    32         f[fa]=find(n+e[i].b);
    33         f[fb]=find(n+e[i].a);
    34     }
    35     cout<<0;
    36     return 0;
    37 }

    //NOIP2010提高组 t3

  • 相关阅读:
    mysql改为mysqli几项注意
    修改链接服务器地址提高下载速度
    果然最适合码农的博客还是博客园
    mysql
    php 检测字符集
    Internet Download Manager has been registered with a fake Serial Number
    SVN图标不见了
    理解createTrackbar函数
    程序块结构
    数组初始化
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/11823603.html
Copyright © 2020-2023  润新知