POJ 2112 Optimal Milking 二分+二分图多重匹配,网络最大流

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解 薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到 阅读详情

题目链接:http://poj.org/problem?id=2112

题意: K台挤奶机分布在C头牛间,每台最多同时服务M头牛。给出距离矩阵,求最小化牛的最大路程?

解法:

一看到最小化最大值(或者最大化最小值),当然是二分搜索了。

先将两点间最短路预处理出来,可以简单warshall_floyd搞定。

接着构建网络流,从s到牛引一条容量1的边,从挤奶机到t引一条容量M的边,

然后对最大路径二分,在二分图匹配建图的时候,牛到挤奶机间距离大于limit的边忽略掉。二分判断条件是,最大流的

流量是否等于牛量,因为题目明确表示至少有一个解使得所有牛都有挤奶机可用。

//POJ 1698

#include <queue>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

const int maxn = 410;
const int maxm = 40010;
const int INF = 0x3fffffff;
struct G
{
    int v, cap, next;
    G() {}
    G(int v, int cap, int next) : v(v), cap(cap), next(next) {}
} E[maxm];
int p[maxn], T;
int d[maxn], temp_p[maxn], qw[maxn]; //d顶点到源点的距离标号,temp_p当前狐优化,qw队列
void init()
{
    memset(p, -1, sizeof(p));
    T = 0;
}
void add(int u, int v, int cap)
{
    E[T] = G(v, cap, p[u]);
    p[u] = T++;
    E[T] = G(u, 0, p[v]);
    p[v] = T++;
}
bool bfs(int st, int en, int n)
{
    int i, u, v, head, tail;
    for(i = 0; i <= n; i++) d[i] = -1;
    head = tail = 0;
    d[st] = 0;
    qw[tail] = st;
    while(head <= tail)
    {
        u = qw[head++];
        for(i = p[u]; i + 1; i = E[i].next)
        {
            v = E[i].v;
            if(d[v] == -1 && E[i].cap > 0)
            {
                d[v] = d[u] + 1;
                qw[++tail] = v;
            }
        }
    }
    return (d[en] != -1);
}
int dfs(int u, int en, int f)
{
    if(u == en || f == 0) return f;
    int flow = 0, temp;
    for(; temp_p[u] + 1; temp_p[u] = E[temp_p[u]].next)
    {
        G& e = E[temp_p[u]];
        if(d[u] + 1 == d[e.v])
        {
            temp = dfs(e.v, en, min(f, e.cap));
            if(temp > 0)
            {
                e.cap -= temp;
                E[temp_p[u] ^ 1].cap += temp;
                flow += temp;
                f -= temp;
                if(f == 0)  break;
            }
        }
    }
    return flow;
}
int dinic(int st, int en, int n)
{
    int i, ans = 0;
    while(bfs(st, en, n))
    {
        for(i = 0; i <= n; i++) temp_p[i] = p[i];
        ans += dfs(st, en, INF);
    }
    return ans;
}

int mp[240][240];
int K, C, M, V; //

int check(int limit){
    int S = V, T = V+1;
    init();
    for(int i = 0; i < K; i++){
        add(i, T, M);
    }
    for(int i = K; i < V; i++){
        add(S, i, 1);
    }
    for(int i = 0; i < K; i++){
        for(int j = K; j < V; j++){
            if(mp[i][j] <= limit){
                add(j, i, 1);
            }
        }
    }
    int ans = dinic(S, T, T+1);
    return ans == C;
}

int main()
{
    scanf("%d%d%d", &K, &C, &M);
    V = K+C;
    for(int i = 0; i < V; i++){
        for(int j = 0; j < V; j++){
            int x;
            scanf("%d", &x);
            mp[i][j] = x ? x : INF;
        }
    }
    //图预处理,warshall_floyd最小化两点的距离
    for(int k = 0; k < V; k++){
        for(int i = 0; i < V; i++){
            for(int j = 0; j < V; j++){
                mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);
            }
        }
    }
    //二分答案
    int l = 0, r = 300*V, ans;
    while(l <= r){
        int mid = (l + r) / 2;
        if(check(mid)) ans = mid, r = mid-1;
        else l = mid+1;
    }
    printf("%d\n", ans);
    return 0;
}
泛微E9开发 明细表字段赋值到主表字段,将各类型合计赋值到主表类型合计中 ①绑定明细表类型、预计金额字段的值改变事件,每当有值发生改变,就需要重新计算供应商1、供应商2、供应商3的合计,如果不绑定这两个字段的话,会出现计算不及时或计算错误的问题。②当有明细行被删除时,也需要重新计算供应商1、供应商2、供应商3的合计,比如删除了供应商1的明细行,如果不重新计算,那么供应商1的值还是被删之前的值,合计错误。将各类型合计赋值到主表类型合计中。 阅读详情

相关推荐

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

POJ -2112(二分多重匹配)

题意:给你K台机器,C头牛,每台机器最多承受M头牛,然后k+C行表示机器到牛的距离,牛到机器的距离,如果距离是0的话表示这两个点道路不存在,要求所有牛到机器中的距离最大值最小 题解:Floyd一下K+C个点之间所有的最短距离,最后距离二分一下,然后就是二分多重匹配在距离的限制下是否可以都匹配成功 #include #include #include #include using namespa

Soul 466

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

poj 2112 Optimal Milking(二分图匹配)

#include #define INF 0x3f3f3f3f #define min(x,y) (((x)>(y))?(y):(x)) int k,c,m; int map[240][240]; int match[240][16]; int vis[240]; int co[240]; void Floyd_Warshall() { int f,i,j; for(f=1;f<=k+c;f+

sky_zdk的博客 275

【后端】主流后端语言:JAVA、C、C++、GO、PYTHON

软件开发领域,语言本身在各自领域都有适用场景,有许多流行的编程语言可供选择,每种语言都有其独特的特点和适用场景。

wnm23的专栏 1万+

使用Python实现卷积神经网络(CNN)

卷积神经网络是一种专门用于处理具有网格状拓扑结构数据(如图像、声音)的深度学习模型。CNN的核心组件是卷积层和池化层,它们能够有效地从图像中提取特征并实现空间不变性,使得模型能够对图像中的物体进行识别和分类。我们定义一个简单的卷积神经网络模型,包括卷积层、池化层和全连接层。return x# 创建模型实例我们选择交叉熵损失函数作为分类任务的损失函数,并使用随机梯度下降(SGD)作为优化器。

Echo_Wish 4489

POJ 2112 二分图

点击打开链接 题意:K个机器制造牛奶,一天可以制造M个牛的,每个牛与机器都有距离,下面的矩阵就是距离,问满足所有牛都被生产了牛奶,与机器最远的牛的距离是多少 思路:最远的距离最小,好吧一看就知道要用二分,关键是二分的条件,看题目意思是满足所有的牛都被生产过,这就是二分条件,那么如何判断所有牛的条件呢,可以发现是二分匹配的模型,源点连机器,机器连牛,就可以判断牛的条件了,二分的距离判断时就是如果

Dan__ge的博客 1786

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7626

poj 2112(二分+网络流)

Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 15749 Accepted: 5617 Case Time Limit: 1000MS Description FJ has moved his K (1 <= K &...

weixin_30783629的博客 170

Python爬虫技术:使用Playwright和Twitter API v2高效获取Twitter/X数据完全教程

遵守规则:始终遵循Twitter的使用条款和速率限制错误处理:实现完善的错误处理和重试机制数据质量:进行数据清洗和验证性能优化:使用异步处理和合理的延迟设置可维护性:模块化代码,便于维护和扩展。

2201_76125261的博客 671

【Flink】FlinkCDC获取mysql数据时间类型差8小时时区解决方案

​ 1、背景: 在我们使用FlinkCDC采集mysql数据的时候,日期类型是我们很常见的类型,但是FlinkCDC读取出来会和数据库的日期时间不一致,情况如下 FlinkCDC获取的数据中create_time字段1694597238000转换为时间戳2023-09-13 17:27:18,而数据库中原始数据如下,并没有到下午5点,这就导致了FlinkCDC读出来的时间和数据库中实际的时间不一致的情况,与数据库对比可以发现,这里的时间戳与数据库时间刚好相差了 8 个小时,在实际生产中这种情况是不

一杯咖啡半杯糖的博客 3854

poj2112(二分网络流)

/* translation: 有c头奶牛和k台挤奶机,每台挤奶机器最多能够同时服务m头奶牛。且每个物体之间有一定的距离。 求一种分配方案,使得每头奶牛能够分配到机器的同时,最小化奶牛所走的最长距离。 solution: 二分+最大流 看到最小化最大值之类的很容易想到用二分枚举答案。然后就是判定是否可行了。方法是每枚举一次, 就重新建图。建图时将距离超过枚举

林伏案的博客 326

Transformer 在自动驾驶中的应用:深度对比特斯拉(Tesla)、小鹏(XNet)、华为(ADS 2.0)在 Transformer 架构应用上的异同

自动驾驶汽车是当前人工智能和机器学习领域的热点研究方向之一。其核心技术之一就是基于深度学习的感知和决策系统。在感知系统中,目标检测和跟踪、语义分割、场景理解等计算机视觉任务至关重要。而在决策系统中,规划和控制模块需要对当前状态进行建模并做出相应的决策。近年来,Transformer模型在自然语言处理领域取得了突破性进展,并逐步被应用到计算机视觉等其他领域。相比于传统的卷积神经网络和循环神经网络,Transformer模型具有建模长距离依赖关系的能力,可以更好地捕捉输入序列中的全局信息。

AI天才研究院 864

poj 2112 Optimal Milking(最大流+二分 或者 二分图多重匹配)

题目链接:http://poj.org/problem?id=2112 题意:有n个挤奶机,m头奶牛,每个挤奶机最多处理k头奶牛。给出挤奶机、奶牛之间的距离,问完成挤奶任务后,使走最远距离奶牛最小化,并输出。 思路:最远距离最小化,很容易知道时二分处理。但是二分判定条件是什么呢? 二分距离成立的情况是 使所以奶牛都可以到挤奶机。这样变成了一个二分图匹配的问题,左边是n个...

agyohust791263的博客 319

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 2112 Optimal Milking (二分+最大流/多重匹配) && POJ 2391 Ombrophobic Bovines( 二分+拆点+最大流)

Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 17940   Accepted: 6421 Case Time Limit: 1000MS Description FJ has moved his K (1 <= K

K键盘里的青春K 517

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

POJ 2112 Optimal Milking 二分图多重匹配 网络流+Floyd+二分

超级经典的一道题目。。竟然1A 了,

ChasingWaves 589

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

poj2112 Optimal Milking

由于之前没做过多重二分匹配问题,所以一直没有头绪,折磨了我好久,后来看到别人用二分查找+floyd+网络流 来实现,自己也就用这种方法A掉了。 具体方法是: 1)先用floyd求到任意milking machine到 任意奶牛之间距离 2)查找到最长的一条距离,并记录下来为max,那么我们就可以知道,要求的值就是在 [0,max]区间 3)下面就开始二分查找了,找到0到max之间,最小的

rookie_Algo的专栏 1469

Optimal Milking(二分图多重匹配+二分)(网络流)

Optimal Milking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2112 Description FJ has moved his K (1 <= K <= 30) milking m

AI蜗牛之家 1746

POJ2112_Optimal Milking_最大流解决匹配问题

最大流、二分图多重匹配、二分枚举、floyd

弱的奋斗之旅 419

POJ 2112 Optimal Milking (二分+最短路+最大流or二分图多重匹配)

Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 9527 Accepted: 3435 Case Time Limit: 1000MS Description FJ has moved his K (1 <= K <= 30)

GentleH's 794

【二分图多重匹配 && 最短路 && (快)最大流】POJ - 2112 Optimal Milking

Problem Description 有C头奶牛,K个挤奶站,每个挤奶器最多服务M头奶牛,奶牛和奶牛、奶牛和挤奶站、挤奶站和挤奶站之间都存在一定的距离。现在问满足所有的奶牛都能够被挤奶器服务到的情况下,行走距离的最远的奶牛的至少要走多远。 思路: 求满足情况行走距离最远的那牛,所走的最短距离的问题 网络流 + 二分。题目给了奶牛和奶牛,奶牛和挤奶站,挤奶站和挤奶站之间的距离,我们得求

ACMer 梁剑锋 的博客 285

poj2112(floyd+二分+二分图多重匹配)

(感觉是一个比较基础的二分图多重匹配) 题目意思大概就是有K个挤奶点,C个奶牛,一个挤奶点能容下M个奶牛,问如果所有奶牛都被放入挤奶点时,距离最远奶牛得最短距离(距离可以经过其他点) 首先看到可以经过其他点,就直接无脑用floyd,求出各个点之间得最短距离 然后要求的是最远距离最短情况,用二分求解 (注意:二分的范围需要考虑清楚,并不是200,因为可能要经过别的路到达,所以应该设大点,200*200能过,实在不放心,10的九次方也能过) 最后就是二分判断条件,即二分图多重匹配,用一个match数组存储C匹配

gronkie的博客 282

POJ 2112(二分,最大流)

POJ2112 题目链接 题意就是c头牛要去往k头奶牛工厂,每个奶牛工厂的承重是m头牛。然后告诉我们每两个点的距离。然后算出在每头奶牛都到达一个奶牛工厂的情况下,行走距离最长的奶牛的最短的情况是多少。那其实一开始的思路是比较明显的,要算最短的最长距离,怎么走路也没限制,那肯定每头牛都走最短路。那就首先用floyd算出任意两点的最短路。然后再把奶牛到工厂的路挑出来保存一下,答案就在这其中的一条了。我们可以对奶牛到工厂的路排序,因为我们要答案尽量小,那我们只要二分下标(二分答案也一样的道理),让mid代表假定的

qq_45863710的博客 481

二分图多重匹配

二分图多重匹配 一般的二分图匹配与多重匹配之间的区别就是: 二分图多重匹配:右边的物品可以和多个左边的相匹配,同时右边的物品可以有一个最大匹配容量V[i] int cnt[maxn],V[maxn];//cnt[i]记录现在第i个星球有多少个人,V[i]记录i星球的容量 int linker[maxn][15];//linker[i][j]表示第i个星球第j个匹配的人是谁 bool dfs(i...

想要一只银渐层 688

poj2112

题意及思路和详细说明见 http://www.xuebuyuan.com/#include #include #define MAXN 250 #define INF 1000000 int dist[MAXN][MAXN]; int que[MAXN]; int map[MAXN][MAXN]; bool used[MAXN], level[MAXN][MAXN]; int N, M, K,

sunshine945 848
上一篇: POJ 1698 Alice's Chance 二分图多重匹配 网络最大流
下一篇: BZOJ 1237: [SCOI2008]配对 一个神奇的东西然后简单DP
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值