zoukankan      html  css  js  c++  java
  • 【扩展域】 关押罪犯

    传送门

    题意

    一共两座监狱,(n)个罪犯编号为(1sim n),两个罪犯之间有怨气值(c),如果处在同一个监狱,就会爆发值为(c)的冲突
    给出(m)对怨气值,分别安排在着两座监狱,使得满足关系并且最大的怨气值最小,如果不存在冲突就输出(0)

    数据范围

    (N leq 20000, M leq 100000)

    题解

    一共两座监狱关系明显具有传递性,贪心,按照怨气值从大到小排序,如果当前已经在同一个监狱直接输出即可
    将每个(lx)表示为不和(x)在一个集合,(ly)表示不和(y)在一个集合的,如果无冲突即两个人可以安排到不同监狱,合并

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>a;i--)
    const int N=1e5+10;
    int n,m;
    int fa[N];
    struct node
    {
        int x,y;
        int c;
        bool operator<(const node x)
        {
            return c>x.c;
        }
    }e[N];
    
    int find(int x)
    {
        if(fa[x]==x) return x;
        return fa[x]=find(fa[x]);
    }
    int main()
    {
        cin>>n>>m;
        rep(i,0,2*n+1) fa[i]=i;
        rep(i,1,m+1) cin>>e[i].x>>e[i].y>>e[i].c;
    
        sort(e+1,e+m+1);
        rep(i,1,m+1)
        {
            int x=find(e[i].x),lx=find(e[i].x+n);
            int y=find(e[i].y),ly=find(e[i].y+n);
    
            if(find(x) == find(y))
            {
                cout<<e[i].c<<endl;
                return 0;
            }
            fa[x]=ly;
            fa[y]=lx;
        }
        cout<<"0"<<endl;
    }
    
  • 相关阅读:
    Andrew Ng机器学习 五:Regularized Linear Regression and Bias v.s. Variance
    cadence时各种焊盘层的定义
    cadence 关于PCB封装的设计
    candence 关于焊盘的描述
    cadence 关于DRC设置
    cadence的关于封装层叠
    cadence 学习
    stm32的一些参数
    无刷电机的FOC理解
    wait()、notify、notifyAll()的使用
  • 原文地址:https://www.cnblogs.com/hhyx/p/13761735.html
Copyright © 2011-2022 走看看