zoukankan      html  css  js  c++  java
  • 4443: [Scoi2015]小秃玩矩阵|二分答案|匈牙利

    K大看成第K小各种WA。

    。。


    K大也就是第nK+1小。所以就能够愉快的二分答案了
    二分答案找出比当前答案小的数的位置的坐标。推断一下能否够选出满足不在同一行同一列的nK+1个数,然后就能够愉快的跑匈牙利了,对于一个坐标(x,y)假设满足a[x][y]当前答案。就把第x行向第y列连边,然后跑匈牙利推断最大匹配是否大于nK+1
    匈牙利真是跑的飞快,然后就卡成rank1 QAQ

    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    #define ll long long
    #define N 1000001
    using namespace std;
    int sc()
    {
        int i=0,f=1; char c=getchar();
        while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
        return i*f;
    }
    int a[255][255];
    int head[N],nxt[N],lst[N],tim[N],from[N];
    int n,m,tot,mx,TI,K;
    void insert(int x,int y)
    {
        lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;
    }
    bool Hungary(int x)
    {
        for(int i=head[x];i;i=nxt[i])
            if(tim[lst[i]]!=TI)
            {
                tim[lst[i]]=TI;
                if(!from[lst[i]]||Hungary(from[lst[i]]))
                {
                    from[lst[i]]=x;
                    return 1;
                }
            }
        return 0;
    }
    bool jud(int x)
    {
        int ans=0;tot=0;
        for(int i=1;i<=n;i++)head[i]=0;
        for(int i=1;i<=m;i++)from[i]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(a[i][j]<=x) insert(i,j);
        for(int i=1;i<=n;i++)
            TI++,ans+=Hungary(i);
        return ans>=K;
    }   
    int main()
    {
        n=sc();m=sc(),K=sc();K=n-K+1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                mx=max(mx,a[i][j]=sc());
        int l=1,r=mx;
        while(l!=r)
        {
            int mid=l+r>>1;
            if(jud(mid))r=mid;
            else l=mid+1;
        }
        cout<<l;
        return 0;
    }
    
  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7098251.html
Copyright © 2011-2022 走看看