题意:有K太挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远
分析:应该先使用floyd求出来点之间的最短路??(不晓得给的图是不是最短路的),二分出来最短的路径。先做做看吧。
注意:分析的没有错误,确实是这么做的,矩阵的前K行是机械到机械和奶牛的距离,后C行是奶牛到机械和奶牛的距离,0代表两点间没有路,应该置为INF,二分的时候R应该值为INF,最短的200是直接距离,有些地方是直接到达不了的。ps:二分匹配确实很快
*************************************************************************
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std; const int MAXN = ;
const int oo = 1e9+; int G[MAXN][MAXN], N, K, C, M;
bool used[MAXN];
struct Link{int link[MAXN], len;}Ly[MAXN]; void Floyd()
{
    for(int k=; k<=N; k++)
    for(int i=; i<=N; i++)
    for(int j=; j<=N; j++)
        G[i][j] = min(G[i][j], G[i][k]+G[k][j]);
}
bool Find(int i, int Mid)
{
    for(int j=; j<=K; j++)
    {
        if( G[i][j] <= Mid && !used[j] )
        {
            used[j] = true;             if( Ly[j].len < M )
            {
                Ly[j].link[ Ly[j].len++ ] = i;
                return true;
            }
            for(int k=; k<Ly[j].len; k++)
            {
                if( Find( Ly[j].link[k], Mid ) == true )
                {
                    Ly[j].link[k] = i;
                    return true;
                }
            }
        }
    }     return false;
}
bool XYL(int Mid)
{
    memset(Ly, false, sizeof(Ly));     for(int i=K+; i<=N; i++)
    {
        memset(used, false, sizeof(used));
        if( Find(i, Mid) == false )
            return false;
    }     return true;
} int main()
{
    while(scanf("%d%d%d", &K, &C, &M) != EOF)
    {
        int i, j; N = K+C;         for(i=; i<=N; i++)
        for(j=; j<=N; j++)
        {
            scanf("%d", &G[i][j]);
            if(i != j && !G[i][j])
                G[i][j] = oo;
        }         Floyd();         int L=, R=oo, ans;         while(L <= R)
        {
            int Mid = (L+R)>>;             if( XYL( Mid ) == true )
                R = Mid - , ans = Mid;
            else
                L = Mid + ;
        }         printf("%d\n", ans);
    }     return ; } 

N - Optimal Milking - POJ 2112(二分图多重匹配+Floyd+二分搜索)的更多相关文章

  1. Optimal Milking POJ - 2112 (多重最优匹配+最小费用最大流+最大值最小化 + Floyd)

      Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 19347   Accepted: 690 ...

  2. poj 2112(二分+多重匹配)

    题目链接:http://poj.org/problem?id=2112 思路:由于要求奶牛走的最远距离的最短路程,显然我们可以二分距离,如果奶牛与挤奶器的距离小于等于limit的情况下,能够满足,则在 ...

  3. POJ2112:Optimal Milking(Floyd+二分图多重匹配+二分)

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 20262   Accepted: 7230 ...

  4. POJ2112 Optimal Milking —— 二分图多重匹配/最大流 + 二分

    题目链接:https://vjudge.net/problem/POJ-2112 Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

  5. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  6. poj 2289 Jamie's Contact Groups【二分+最大流】【二分图多重匹配问题】

    题目链接:http://poj.org/problem?id=2289 Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K ...

  7. Poj 2289 Jamie's Contact Groups (二分+二分图多重匹配)

    题目链接: Poj 2289 Jamie's Contact Groups 题目描述: 给出n个人的名单和每个人可以被分到的组,问将n个人分到m个组内,并且人数最多的组人数要尽量少,问人数最多的组有多 ...

  8. kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树

    二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...

  9. <转> 二分图多重匹配问题

    在二分图最大匹配中,每个点(不管是X方点还是Y方点)最多只能和一条匹配边相关联,然而,我们经常遇到这种问题,即二分图匹配中一个点可以和多条匹配边相关联,但有上限,或者说,Li表示点i最多可以和多少条匹 ...

随机推荐

  1. TCO 2015 Round 1B DIV1 500 概率题

    [题意]现在有一些线索,每个线索被发现的概率p[i],如果线索i被知道,那么其他线索也可能会被知道,用vector<string> c给出,c[i][j]='Y'表示知道i这个线索,j这个 ...

  2. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  3. ASP.NET-FineUI开发实践-15

    1.按条件控制Grid不可编辑     Grid编辑其实用到的不多...但是也有要控制权限或者其他条件不能编辑的情况其实挺简单,学过extjs的知道,我现在也只是写前台了,没有写到后台事件,有时间再说 ...

  4. 登录模块需要用到session留底

    <% HttpSession sessions=request.getSession(); Object sessionValues=sessions.getAttribute("ui ...

  5. java.lang.ClassCastException

    是指类型转换出错 当前者的域小于后者的时候出现 譬如说:前者A是子类的对象,而后者B是父类的对象 若使用A = B;就会抛出java.lang.ClassCastException List<C ...

  6. FileWriter类的flush方法的作用

    FileWriter类的flush方法的作用 每次io都会影响性能,将需要写入的内容,放入缓冲区中,然后调用flush方法,将缓冲区内容写入文件中.

  7. (转)织梦cms首页添加digg顶一下的修改方法

    现在把文章内容页拔的顶拔出来.分享一下让各位需要的朋友参考使用(特别注意:红色的是修改的地方)第一步:把顶踩的js和ajax提取出来,放在想要使用的页面用(比如:首页)以下是内容页顶踩用的js.提取出 ...

  8. Linux基本权限

    首先需要我们了解的是,权限(rwx)对于文件和目录的作用是不一样的 . 权限对文件的作用 r : 读取文件内容(cat , more , head , tail) w: 编辑.新增.修改文件内容(vi ...

  9. JavaScript 之 关键内容

    词法作用域.调用对象.作用域链.闭包.构造函数.原型.类.继承 局部变量查找路径 属性查找路径

  10. Chrome扩展与用户隐私

    转载自https://www.imququ.com/post/chrome-extensions-and-user-privacy.html   Google Chrome浏览器应该早就是大家的默认了 ...