POJ 2112 Optimal Milking (二分 + floyd + 网络流)

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南 本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。 阅读详情

POJ 2112 Optimal Milking 


题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C≤200)头奶牛,在奶牛和挤奶器之间有一组不同长度的路。K个挤奶器的位置用1~K的编号标明,奶牛的位置用K+1~K+C 的编号标明。每台挤奶器每天最多能为M(1≤M≤15)头奶牛挤奶。寻找一个方案,安排每头奶牛到某个挤奶器挤奶,并使得C 头奶牛需要走的所有路程中的最大路程最小。每个测试数据中至少有一个安排方案。每条奶牛到挤奶器有多条路。

思路:先用Floyd 算法求出能达到的任意两点之间的最短路径,然后二分最大距离的最小值,每次用二分的值求最大流。
在求最大流时构图:建立一个源点,每个点到挤奶器连一条流量为m的边。建立一个汇点,每头奶牛到汇点连一条流量为1的边。挤奶器与奶牛之间的距离小于等于mid则连边,流量为1。最后求最大流是否为c即可。

代码:
/*
ID: wuqi9395@126.com
PROG:
LANG: C++
*/
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<fstream>
#include<cstring>
#include<ctype.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF (1<<30)
#define PI acos(-1.0)
#define mem(a, b) memset(a, b, sizeof(a))
#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--)
#define eps 1e-6
#define debug puts("===============")
#define pb push_back
//#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define POSIN(x,y) (0 <= (x) && (x) < n && 0 <= (y) && (y) < m)
typedef long long ll;
typedef unsigned long long ULL;
const int maxn = 250;
const int maxm = 100000;
int k, c, m;
int mp[maxn][maxn];
struct node {
    int v;    // vertex
    int cap;    // capacity
    int flow;   // current flow in this arc
    int nxt;
} e[maxm * 2];
int g[maxn], cnt;
int st, ed, n;
void add(int u, int v, int c) {
    e[++cnt].v = v;
    e[cnt].cap = c;
    e[cnt].flow = 0;
    e[cnt].nxt = g[u];
    g[u] = cnt;

    e[++cnt].v = u;
    e[cnt].cap = 0;
    e[cnt].flow = 0;
    e[cnt].nxt = g[v];
    g[v] = cnt;
}

void init(int mid) {
    mem(g, 0);
    cnt = 1;
    st = 0, ed = k + c + 1;
    n = k + c;
    for (int i = 1; i <= k; i++) add(st, i, m);
    for (int i = k + 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) if (mp[i][j] <= mid) add(j, i, 1);
        add(i, ed, 1);
    }
    n += 3;
}

int dist[maxn], numbs[maxn], q[maxn];
void rev_bfs() {
    int font = 0, rear = 1;
    for (int i = 0; i <= n; i++) { //n为总点数
        dist[i] = maxn;
        numbs[i] = 0;
    }
    q[font] = ed;
    dist[ed] = 0;
    numbs[0] = 1;
    while(font != rear) {
        int u = q[font++];
        for (int i = g[u]; i; i = e[i].nxt) {
            if (e[i ^ 1].cap == 0 || dist[e[i].v] < maxn) continue;
            dist[e[i].v] = dist[u] + 1;
            ++numbs[dist[e[i].v]];
            q[rear++] = e[i].v;
        }
    }
}
int maxflow() {
    rev_bfs();
    int u, totalflow = 0;
    int curg[maxn], revpath[maxn];
    for(int i = 0; i <= n; ++i) curg[i] = g[i];
    u = st;
    while(dist[st] < n) {
        if(u == ed) {   // find an augmenting path
            int augflow = INF;
            for(int i = st; i != ed; i = e[curg[i]].v)
                augflow = min(augflow, e[curg[i]].cap);
            for(int i = st; i != ed; i = e[curg[i]].v) {
                e[curg[i]].cap -= augflow;
                e[curg[i] ^ 1].cap += augflow;
                e[curg[i]].flow += augflow;
                e[curg[i] ^ 1].flow -= augflow;
            }
            totalflow += augflow;
            u = st;
        }
        int i;
        for(i = curg[u]; i; i = e[i].nxt)
            if(e[i].cap > 0 && dist[u] == dist[e[i].v] + 1) break;
        if(i) {   // find an admissible arc, then Advance
            curg[u] = i;
            revpath[e[i].v] = i ^ 1;
            u = e[i].v;
        } else {    // no admissible arc, then relabel this vertex
            if(0 == (--numbs[dist[u]])) break;    // GAP cut, Important!
            curg[u] = g[u];
            int mindist = n;
            for(int j = g[u]; j; j = e[j].nxt)
                if(e[j].cap > 0) mindist = min(mindist, dist[e[j].v]);
            dist[u] = mindist + 1;
            ++numbs[dist[u]];
            if(u != st)
                u = e[revpath[u]].v;    // Backtrack
        }
    }
    return totalflow;
}
void get() {
    n = k + c;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            scanf("%d", mp[i] + j);
            if (mp[i][j] == 0 && i != j) mp[i][j] = INF;
        }
    }
}
void floyd(int n, int mp[][maxn]) {
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) if (mp[i][k] != INF) {
            for (int j = 1; j <= n; j++) mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);
        }
    }
}
int main () {

    while(scanf("%d%d%d", &k, &c, &m) != EOF) {
        get();
        floyd(n, mp);
        int l = 0, r = 10000, mid;
        while(l < r) {
            mid = (l + r) >> 1;
            init(mid);
            //debug;
            if (maxflow() >= c) r = mid;
            else l = mid + 1;
        }
        printf("%d\n", r);
    }
    return 0;
}


【100%通过率】华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】 2023华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位 阅读详情

相关推荐

phpstudy自定义安装mysql8.3并启动

下载压缩包文件然后按下面的图片一步一步操作选择版本,选择第一个压缩包文件,下载下载完成后,解压到phpstudy环境目录下

互联网碎碎念 2802

POJ 2112 Optimal Milking (二分+最短路径+网络流)

POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit:2000MS Memory Limit:30000K Total Submissions:10176 Accepted:3698 Case Time Limit:1000M...

weixin_30734435的博客 176

Bootloader Design of PIC18 series MCU

注意:下列描述是在PIC单片机上启用Bootloader的一个相关知识的近似完备集。所有需要了解的,与bootloader与用户态程序交互的理论知识都已给出。包含内存组织,跳转,中断等必备功能的描述。

含光左卫的工作笔记集 1267

poj2112

Optimal Milking Time Limit:2000MS Memory Limit:30000K Total Submiss...

Phoebe_Wu2016的博客 189

CocosCreator3.8.2实战:5分钟搞定多分辨率适配与横竖屏自动翻转(附完整Demo)

本文针对CocosCreator3.8.2开发者,提供了一套5分钟快速集成、开箱即用的多分辨率屏幕适配与横竖屏自动翻转解决方案。通过封装好的ScreenAdapter组件,开发者无需处理复杂计算,即可实现等比缩放或拉伸全屏两种主流适配模式,并自动响应设备旋转,有效解决移动端UI在不同屏幕比例和方向下的显示问题。文末附完整Demo。

z4a5b6的博客 723

倍福--TwinSAFE功能块的使用

在安全模块的程序设计中,输入变量取反,或者把PLC的变量连接到安全的功能块程序中, 操作流程 1.1. 功能块输出取反 例如修改IN,右击属性,然后可在Single-Channel选项中选择是NO还是NC的输入信号。 1.2. PLC标准变量作为安全程序的输入 1.2.1. 建立两个PLC变量 1.2.2. 安全程序区创建变量 1.2.3. 功能块变量链接 首先,PLC变量不能直接连到Estop功能块的输入变量中,否则会报错,但PLC可以连接到SafeAnd这些功能块,然后再转出来,如下所示

weixin_41883890的博客 5313

poj 2112 Optimal Milking(最大费用流+dinic算法+二分搜索)

Optimal Milking Time Limit:2000MS Memory Limit:30000K Total Submissions:9253 Accepted:3341 Case Time Limit:1000MS Description FJ has moved his K ...

weixin_30875157的博客 210

【系统架构设计师】十、统一建模语言UML(基本概念|UML2.0|SysML)

UML 2.0 提供了 14 种图,分别是类图、对象图、用例图、序列图、通信图(协作图)、状态图、活动图、构件图(组件图)、部署图、制品图、组合结构图、包图、交互概览图和计时图(定时图)。序列图、通信图、交互概览图和计时图均被称为交互图。 系统建模语言(SysML)是一种通用图形建模语言,用于指定,分析,设计和验证可能包括硬件,软件,信息,人员,程序和设施的复杂系统。特别是,该语言提供了图形表示,其具有用于建模系统需求,行为,结构和参数的语义基础,用于与其他工程分析模型集成。

帅次的博客 2523

poj 2112 Optimal Milking(二分+floyd+最大流)

  题目大意就是k个机器和c头牛组成K+C个点,还有个m表示一个机器最多给m头牛服务,然后给你一个(K+C)*(K+C)的矩阵描述了任意2个物体之间的边关系,边权为0表示无边。然后要你在c头牛都能找到机器配对的前提下求c头牛到机器的最远距离的最小值,先把k个机器和c头牛看成是K+C个点,方法就是跑个floyd先求出任意2个点之间的最短距离,然后在二分最远距离的最小值,设low为0,up为10000...

SEIZE THE DAY 252

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

本项目旨在分析往届世界杯比赛数据,找出规律,最后使用决策树算法构建世界杯比赛预测模型,给出两个球队即可预测胜率,可以给爱看球的小伙伴提供一个参考。本次实验我们使用了2018年及其之前的世界杯比赛数据,通过建立决策树模型,模型准确率为82%,接着我们使用该模型预测了2022年世界杯的5场半决赛及决赛,模型准确率也是接近80%的,说明模型效果还是很不错的。心得与体会:通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。

m0_64336780的博客 1万+

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1333

POJ 2112 Optimal Milking(二分+最大流)

POJ 2112 Optimal Milking 题目链接 题意:给定一些机器和奶牛,在给定距离矩阵,(不在对角线上为0的值代表不可达),每个机器能容纳m个奶牛,问所有奶牛都能挤上奶,那么走的距离最大的奶牛的最小值是多少 思路:明显的二分+最大流,注意floyd求出的距离矩阵最大值可能不止200,所以二分的上限要注意 代码: #include #include #

Remilia's 995

在YOLO中扩充新类别并且不影响旧类的识别精度

让我们先从简单的部分开始:用我们的新类训练自定义 YOLOv8 模型。在本教程中,我们将向模型添加车牌类。我们将使用Roboflow 中的一个数据集。这个数据集有两个车牌类。在开始训练之前,我们还必须对库进行一些更改。为了节省时间,我还将本教程中我们将进行的更改转换为补丁该补丁包含多项更改,但大多数更改都用于指南的下一部分。if RANK!= -1:是的,我们将编写一个回调。我们希望将此自定义训练模型的头部与 COCO 预训练模型中的旧头部一起使用。

如果想成为中心,那么就到中心去吧。 1225

【POJ 2112 Optimal Milking】网络流 & 二分 & floyd

Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 18478 Accepted: 6594 Case Time Limit: 1000MS DescriptionFJ has moved his K (1 <= K <= 30) milking machines out

楚江枫 525

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 2112 Optimal Milking (floyd + 二分 + 网络流)

FLOYD预处理出每两点之间的最短距离,二分查找判断

蘑菇--走在通往梦想的道路上。 798

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POJ 2112 — Optimal Milking 网络流+floyd+二分

原题:http://poj.org/problem?id=2112 题意: 有k个挤奶器,c头牛,每个挤奶器可以服务m头牛; 给出[k+c, k+c]的矩阵,表示任意两点间的距离(0表示无法到达) 问使得所有牛都能被服务的最短距离; 思路: 先用floyd求出最短距离; 再二分这些距离,只要距离小于等于该值就可建边,然后判断最大流是否等于c; 最后输出最小值; #

吧唧吧唧 464

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

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

ChasingWaves 589

Optimal Milking (poj 2112 网络流+二分+floyd)

题意:农场有K个挤奶器和C头奶牛,每个挤奶器和奶牛都在不同的位置,挤奶器编号1~K,奶牛编号K+1~K+C,邻接矩阵给出它们之间的距离,每台挤奶器每天最多能为M头牛挤奶。寻找一个方案,安排每头奶牛到某个挤奶器挤奶,并使得C头奶牛需要走的路程中的最大路程最小。 思路:先用floyd算法求出能到达的任意两点之间的最短距离,然后dinic算法求最大流,搜索最大距离的最小值采用二分法。

@you! 732

POJ2112Optimal Milking(二分+floyd最短路+网络流)

题目地址:http://poj.org/problem?id=2112 最近忙着预习课本备考,没怎么刷题,(我是真的有在好好看书。。)不敲题还是手痒痒,马上就邀请赛了,还是每晚睡觉前都拿来刷题吧。白天的时间足够了。 话说这题调了一晚上。。。一直以为是几天没敲状态下滑。。(虽然也没几天。。)当发现错误的时候才发现原来是少敲了个字母。。。而且我一般很少在bfs的那个地方出错,错误地方也很隐蔽。。所

scf0920 1325

POJ 2112-Optimal Milking(网络流_最大流+floyd+二分查找)

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

Rocky0429 1423

POJ2112 Optimal Milking---二分+Floyd+网络流

题目链接: https://vjudge.net/problem/POJ-2112 题目大意: k个机器,每个机器最多服务m头牛。 c头牛,每个牛需要1台机器来服务。 告诉你牛与机器每个之间的直接距离。 问:让所有的牛都被服务的情况下,使走的最远的牛的距离最短,求这个距离。 解题思路: 二分枚举距离,实际距离满足当前枚举距离限制的可以加入这条边。枚举的距离中符合条件的最小值就是答案...

weixin_33958366的博客 137

POJ2112Optimal Milking(二分法+floyd最短+网络流量)

职务地址:http://poj.org/problem?id=2112 近期忙着预习课本备考,没怎么刷题。(我是真的有在好好看书。。)不敲题还是手痒痒。立即就邀请赛了,还是每晚睡觉前都拿来刷题吧。白天的时间足够了。 话说这题调了一晚上。。。一直以为是几天没敲状态下滑。。(尽管也没几天。。)当发现错误的时候才发现原来是少敲了个字母。。。并且我一般非常少在bfs的那个地方出错,错...

weixin_30315905的博客 104

POJ 2112 Optimal Milking (二分+最短路径+网络流)

POJ 2112 Optimal Milking (二分+最短路径+网络流) Optimal Milking Time Limit:2000MS Memory Limit:30000K Total Submissions:10176 Accepted:3698 Case Ti...

weixin_30325793的博客 81

POJ 2112 Optimal Milking(二分+floyd+最大流)

POJ 2112 Optimal Milking(二分+floyd+最大流) http://poj.org/problem?id=2112 题意: k个机器,每个机器最多服务m头牛。 c头牛,每个牛需要1台机器来服务。 告诉你牛与机器(牛与牛,机器与机器)每个之间的直接距离。 问:让所有的牛都被服务的情况下,使走的最远的牛的距离最短,求这个距离。 分析:        首先用flo

code 1117

poj2112 Optimal Milking (Dinic+Floyd+二分)

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

程序猿之路 2235
上一篇: 背包问题总结
下一篇: POJ 1087 A Plug for UNIX (网络最大流)
SIO__Five
博客等级 码龄14年 29粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值