题意:有N头奶牛,M个牛棚,每个牛棚都有一个容量,并且每个牛对牛棚都有一个好感度,现在重新分配牛棚,并且使好感觉最大的和最小的差值最小。
分析:好感度貌似不多,看起来可以枚举一下的样子,先试一下把
注意:枚举确实是没问题,不过那个输入需要注意一下(错了好几次才发现),比如说第二行 2 3 1 4,意思就是这个牛最中意的牛圈是2号,其次是3号。。。最后一行是每个牛圈能放多少牛,输出的时候要计算端点,也就是最大的rankMax-rankmin+1
**************************************************
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int MAXN = ;
const int MAXM = ; int G[MAXN][MAXM], N, M;
int cows[MAXM];///牛棚最多可以安放的牛的数量
bool used[MAXM];
struct Link{int link[MAXN], len;}Ly[MAXM]; bool Find(int i, int L, int R)
{
    for(int j=; j<=M; j++)
    {
        if( G[i][j]>=L && G[i][j]<=R && !used[j] )
        {
            used[j] = true;             if( Ly[j].len < cows[j] )
            {
                Ly[j].link[ Ly[j].len++ ] = i;
                return true;
            }
            for(int k=; k<Ly[j].len; k++)
            {
                if( Find( Ly[j].link[k], L, R ) == true )
                {
                    Ly[j].link[k] = i;
                    return true;
                }
            }
        }
    }     return false;
}
bool XYL(int L, int R)
{
    memset(Ly, false, sizeof(Ly));     for(int i=; i<=N; i++)
    {
        memset(used, false, sizeof(used));
        if( Find(i, L, R) == false )
            return false;
    }     return true;
} int main()
{
    while(scanf("%d%d", &N, &M) != EOF)
    {
        int i, j, L=, R=M, Mid, ans, v;         for(i=; i<=N; i++)
        for(j=; j<=M; j++)
        {
            scanf("%d", &v);
            G[i][v] = j;
        }         for(i=; i<=M; i++)
            scanf("%d", &cows[i]);         while(L <= R)
        {
            Mid = (L+R) >> ;             for(i=; i<=M; i++)
            {
                if( XYL(i, i+Mid) == true )
                    break;
            }             if(i <= M)
                R = Mid-, ans = Mid;
            else
                L = Mid+;
        }         printf("%d\n", ans+);
    }     return ;
}

O - Steady Cow Assignment - POJ 3189(多重匹配+枚举)的更多相关文章

  1. Steady Cow Assignment POJ - 3189 (最大流+匹配)

    Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which ...

  2. POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】

     Steady Cow Assignment Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

  3. Poj 3189 Steady Cow Assignment (多重匹配)

    题目链接: Poj 3189 Steady Cow Assignment 题目描述: 有n头奶牛,m个棚,每个奶牛对每个棚都有一个喜爱程度.当然啦,棚子也是有脾气的,并不是奶牛想住进来就住进来,超出棚 ...

  4. POJ3189:Steady Cow Assignment(二分+二分图多重匹配)

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7482   Accepted: ...

  5. POJ3189 Steady Cow Assignment —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-3189 Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65 ...

  6. POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment

    这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...

  7. POJ3189 Steady Cow Assignment

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6817   Accepted:  ...

  8. POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】

    <题目链接> 题目大意: 有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进 ...

  9. POJ 3189 Steady Cow Assignment

    题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小.   题目输入: 首先是两个 ...

随机推荐

  1. 使用Navicat或PLSQL客户端工具连接远程Oracle数据库(本地无需安装oracle)

    1.首先下载好客户端工具,然后到Oracle官网下载Instant Client: http://www.oracle.com/us/solutions/index-097480.html 解压文件到 ...

  2. 洛谷 1503 鬼子进村 (set)

    /*set加速维护*/ #include<iostream> #include<cstdio> #include<cstring> #include<set& ...

  3. Windows Azure上的Odoo(OpenERP)-1.创建Ubuntu虚拟机,安装PostgreSQL 数据库

    前提是您必须拥有Windows Azure的账号,如果没有的话,可以去Windows Azure 中国区网站申请免费试用账号.哈哈,我就是第一批申请的试用账号,感觉自己挺幸运的.申请的过程就不写了,请 ...

  4. PHP 关于文件操作的简单介绍

    文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...

  5. MSChart使用之双Y轴使用

    protected void SearchChart() { Chart1.ChartAreas.Clear(); Chart1.Series.Clear(); ChartArea _ChartAre ...

  6. Linux服务器指令

    1.查看cpu信息:/proc/cpuinfo2.查看内存信息:/prco/meminfo3.查看服务器版本信息:cat /etc/issue4.服务器系统位数:uname -a5.网卡信息:ifco ...

  7. 疯狂学习java web2(css)

    CSS应该是样式描述的意思,定义如下: 什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 ...

  8. underscorejs-reduce学习

    2.3 reduce 2.3.1 语法: _.reduce(list, iteratee, [memo], [context]) 2.3.2 说明: reduce方法把list中元素归结为一个单独的数 ...

  9. 如何根据Jquery实现两级联动

    <script language="javascript" type="text/javascript" > $(function (){      ...

  10. POJ 3356(最短编辑距离问题)

    POJ - 3356 AGTC Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Desc ...