POJ 2195 Going Home(最大流)

POJ 2195 Going Home (最佳完美匹配, 最小费用最大流) 题目类型  最优比率生成树 题目意思 给出最多 1000 个点与这些点之间的边的长度与花费 找一棵生成树 使  Sum(边的花费) / Sum(边的长度) 的值最小 输出这个值 解题方法 01分数规划 -> 对于0-1分数规划的Dinkelbach算法的分析 这道题求的是最小值 设边的花费为行向量 [c1, c2, ... , 阅读详情

 

传送门

题意:给你一个n*m的矩阵,矩阵内m代表man,H代表hotel,每个man都要到hotel去,一个hotel只能住一个人,一个人移动(上下左右)一步的cost为1,求每个人都到hotel的最小总cost

 

最大流裸题

首先每个人到所有hotel对应的cost都可以O(1)得到(就是哈夫曼距离),那么每个人和所有的hotel都建一条边,流量为1,cost为它们之间的哈夫曼距离,最后拉出个源点连人,汇点连hotel,建图便完成了,然后就是copy and paste.

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
const int maxn=200*200+5;
const int N=200*200+5;
#define inf 0x3f3f3f3f
struct edge
{
    int to,Next,c;
    int cost;
} e[maxn];
int cnt,head[N];
int s,t;
int dis[N],pre[N],path[N];
bool vis[N];
void add(int u,int v,int c,int cost)
{
    e[cnt].to=v;
    e[cnt].c=c;
    e[cnt].cost=cost;
    e[cnt].Next=head[u];
    head[u]=cnt++;
    e[cnt].to=u;
    e[cnt].c=0;
    e[cnt].cost=-cost;
    e[cnt].Next=head[v];
    head[v]=cnt++;
}
bool spfa()
{
    memset(pre,-1,sizeof pre);
    memset(dis,inf,sizeof dis);
    memset(vis,0,sizeof vis);
    dis[s]=0;
    vis[s]=1;
    queue<int>q;
    q.push(s);
    while(!q.empty())
    {
        int x=q.front();
        q.pop();
        vis[x]=0;
        for(int i=head[x]; ~i; i=e[i].Next)
        {
            int te=e[i].to;
            if(e[i].c>0&&dis[x]+e[i].cost<dis[te])
            {
                dis[te]=dis[x]+e[i].cost;
                pre[te]=x;
                path[te]=i;
                if(!vis[te])q.push(te),vis[te]=1;
            }
        }
    }
    return pre[t]!=-1;
}
int mincostmaxflow()
{
    int cost=0,flow=0;
    while(spfa())
    {
        int f=inf;
        for(int i=t; i!=s; i=pre[i])
            if(e[path[i]].c<f)
                f=e[path[i]].c;
        flow+=f;
        cost+=dis[t]*f;
        for(int i=t; i!=s; i=pre[i])
        {
            e[path[i]].c-=f;
            e[path[i]^1].c+=f;
        }
    }
    return cost;
}
void init()
{
    memset(head,-1,sizeof head);
    cnt=0;
}
vector<pair<int,int> > v1;
vector<pair<int,int> > v2;
int n,m;
int get_haff(pair<int,int> x,pair<int,int> y)
{
    return abs(x.first-y.first)+abs(x.second-y.second);
}
int get_id(pair<int,int> x)
{
    return max(x.first-1,0)*m+x.second;
}
char mi[105][105];
int main()
{
    while(~scanf("%d%d",&n,&m)&&!(!n&&!m))
    {
        v1.clear(),v2.clear();
        init();
        for(int i=0; i<n; i++) scanf("%s",mi[i]);
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                if(mi[i][j]=='m') v1.push_back(make_pair(i+1,j+1));
                else if(mi[i][j]=='H') v2.push_back(make_pair(i+1,j+1));
            }
        }
        for(int i=0; i<v1.size(); i++)
        {
            for(int j=0; j<v2.size(); j++)
            {
                int id1=get_id(v1[i]),id2=get_id(v2[j]);
                add(id1,id2,1,get_haff(v1[i],v2[j]));
            }
        }
        s=0,t=n*m+2;
        int ss=n*m+1,tot=v1.size();
        add(s,ss,tot,0);
        for(int i=0; i<v1.size(); i++) add(ss,get_id(v1[i]),1,0);
        for(int i=0; i<v2.size(); i++) add(get_id(v2[i]),t,1,0);
        printf("%d\n",mincostmaxflow());
    }

}

 

 

掌握费用流算法:POJ2195-Going Home问题解答与实战 在讨论最小费用最大流问题之前,我们必须先了解流网络的基本概念。流网络是一个有向图,其中每条边都有一个非负容量上限,表示可以流过这条边的最大流量。流网络通常表示为G=(V, E),其中V是顶点的集合,E是边的集合,每条边(u,v)∈E都有一个容量限制c(u,v)≥0。在流网络中,通常有一对特殊的顶点,即源点s(source)和汇点t(sink)。源点是流量的起点,而汇点是流量的终点。流在网络中的流动必须满足两个基本条件:流量守恒和容量限制。 阅读详情

相关推荐

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1310

POJ 2195 Going Home (最小费用最大流)

题意:给出一张n*m的图,有k个人、k间房子,求使得每个人都走进房子的最短总路程。 题解:最小费用最大流 按照源点->房子->人->汇点建图,房子到人之间的费用,就是两两之间的曼哈顿距离,容量都是1。 这里用的spfa。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include&

gongyuandaye的博客 323

STM32平台中ARM架构向量表配置:手把手教程

深入讲解STM32平台下arm架构的向量表配置方法,结合实际操作步骤,帮助开发者掌握中断向量的定位与初始化,提升嵌入式系统开发效率。

weixin_42514540的博客 802

POJ2195: Going Home 题解

这道题是费用流模板题 处理费用流可以用edmonds-karp+spfa算法,这样可以有效的处理负边,但spfa的复杂度不够稳定 我们可以导入势的概念从而使用dijkstra+edmonds-karp来解决费用流 设顶点i的势为h(i),我们将图中原来的边d(e)变成d'(e)=d(e)+h(u)-h(v),这样改动后的图最终的答案只要减去h(s)-h(t)就是原图的答案 所以只要合理的选

IcePrincess_1968's World 353

AI内容安全机制解析:从破甲现象看模型防护与合规边界

AI内容安全机制是保障人工智能模型合规应用的核心技术,其原理基于多层防护体系。通过意图识别、关键词过滤和多模态检测等技术,系统能够实时监控用户输入和模型输出,有效拦截违规内容。这种机制的技术价值在于平衡模型创造力与内容安全性,确保AI生成内容符合伦理规范。在应用场景上,内容安全机制广泛应用于聊天机器人、内容创作平台和企业级AI系统,防止色情、暴力等有害信息的传播。随着破甲等绕过手法的出现,安全机制需要持续进化以应对指令混淆、上下文污染等新型挑战。本文从技术攻防角度深入分析AI内容安全的实现原理与发展趋势,为

1095

Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法

AX200 iwlwifi-cc-46.3cfab8da.0.tgz 无法下载网页出问题使用 其他方法来进行但是前提还是有网络。

chen20170325的博客 1039

POJ 2195 Going Home 费用流

题目源:https://vjudge.net/problem/POJ-2195               http://poj.org/problem?id=2195 模板源:https://blog.youkuaiyun.com/Adolphrocs/article/details/84558274 题解:费用流 将每个人man与每个屋子house,连一条流量为1,费用为(man和house的距离)...

Adolphrocs的博客 651

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1570

POJ2195-Going Home

全解题报告索引目录 -> 【北大ACM – POJ试题分类】 转载请注明出处:http://exp-blog.com ------------------------------------------------------------------------- 大致题意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致。man每...

ζёСяêτ - 小優YoU 8396

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3806

使用 MATLAB/Simulink 构建一个 光伏-储能联合系统接入10kV配电网 的协同控制仿真模型

本教程详细介绍了基于Simulink的光伏-储能联合系统在配电网中的协同控制仿真方法。主要内容包括:系统结构设计(光伏阵列、储能电池、双向变流器等);建模流程(MPPT控制、BMS系统、PCS矢量控制);核心协同控制策略(功率平滑、削峰填谷、电压支撑的三层控制架构);仿真结果分析方法及性能评估指标。教程提供了从组件建模到系统集成的完整指导,并建议了模型预测控制、微网孤岛运行等进阶方向,帮助开发者掌握智能电网的关键仿真技术。通过该模型可实现可再生能源的高效利用与电网稳定运行的平衡。

amy_mhd的博客 217

poj 2195 Going Home (最小费用最大流)

大致题意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致。man每移动一格需花费$1(即单位费用=单位距离),一间house只能入住一个man。现在要求所有的man都入住house,求最小费用。   解题思路: 费用流问题。   构图:        把man作为一个顶点集合U,house作为另一个顶点集合V,把U中所有点到V中所有点连线,费

Ezereal的博客 710

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 321

poj 2195 Going Home(最小费最大流)

poj 2195 Going Home Description On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adj...

weixin_34258838的博客 100

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

POJ2195 Going Home 最小费用最大流

POJ 2195 Going Home 二分图的最大权匹配 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25567   Accepted: 12838 Description On a grid map there are n little men and n ...

紫芝的博客 1838

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

POJ 2195 Going Home 【最小费用最大流】

题目链接:http://poj.org/problem?id=2195 Time Limit:1000MS Memory Limit:65536K Total Submissions:27150 Accepted:13536 Description On a grid map there are n little me...

a6334167的博客 154

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

POJ2195 Going Home——最小费用最大流

点这里 题意: 在一个n*m的图上,会有相同数量的小人和房子。要求将所有的小人都送到房子里,规则是一个小人对应一个房子,并且小人到达房子的花费为他们之间的曼哈顿距离(横纵距离之和)。问将所有小人都送到房子里的最小花费是多少。 题解: 这个题目还是很容易想到是最小费用最大流的,一个房子对应一个小人就是流,小人到达房子的花费就是费用,然后就最小费用。建模也不难,只要记录每个小人和每个房子的坐标,在所有的小人和房子之间,都加上一条费用为他们之间的曼哈顿距离、容量为1的边。另外定义一个超级源点S,连接...

lllllan 229

POJ - 2195 Going Home 最小费用最大流

题目链接:https://vjudge.net/problem/POJ-2195 题意:n个人,n个房子,让每个人都回到一个房子里面,使得所有人走的步数和最小 题解:建一个源点,分别指向人,对应flow为1,cost为0,建一个汇点所有房子指向他,flow为1,cost为0,跑一下最小费用最大流即可。 #include <iostream> #include <cstdi...

还我笑颜 250

POJ_2195_Going Home_最小费用最大流

Going Home Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 20807        Accepted: 10543 Description On a grid map there are n little men and n houses. In each unit time, every

持之以恒_fighting 886

POJ - 2195 Going Home 最小费用最大流

题意:多组输入,n行m列矩阵包含相等个数的 ‘m’ 和 ‘ H ’ 每个men要到达Home,每移动一个格子耗费 1,求最小花费。 题解:很明显每个人都要到达且移动次数最少,即最小花费最大流。 源点->men->Home->汇点建图 #include <iostream> #include <stdio.h> #include <que...

恒持此志成永志 206

POJ-2195 Going Home(最小费用最大流模板)

题目链接:POJ-2195 Going Home 题意 给出$N$行$M$列的网格,'m'表示人,'H'表示房子,且'm'和'H'的数量相同,一个人只能进一间房子,一间房子也只能给一个人进去,人可走上下左右四个方向,现在要让所有人进入房子,求最短路径和。 思路 这是一个二分图带权最小匹配问题,可直接用最小费用最大流求解。 源点向人各连一条容量为1,费用为0的边,每个人向每间...

weixin_30911809的博客 128

poj2195 Going Home 最小费用最大流

题意:给定n*m的矩阵 (最大100*100) .为空地 H为房子 m为人 (题目保证 H的个数 一个房子只能住一个人 问:让每个人回到任意一个房子使得所有人需要步数最少,问最少需要多少步。 思路:费用流,虚拟源点与人建边 费用为0, 一个人与所有房子建边,费用为步数, 房子与汇点建边费用为0 所有边流量限制为1 /*********************************

AC_kereo的专栏 889

POJ - 2195 Going Home (最小费用最大流)

On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man, you need t...

vocaloid01的博客 232

poj 2195 Going Home(最小费用最大流)

http://poj.org/problem?id=2195 题意:一个n*m的矩阵,其中每个'm'代表一个人,每个‘H'代表一个房子,且人和房子的数目相同,要求每个人找到一个属于自己的房子,每个房子只能住一个人,人到房子的花费就是它们之间的曼哈顿距离。问他们的最小花费。 思路:

2217

POJ-2195 Going Home(最小费用最大流)

Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21918   Accepted: 11087 Description On a grid map there are n little men and n houses. In each unit time, ever...

十分残念的博客 517
上一篇: POJ 3281 Dining(最大流)
下一篇: hdu4280 Island Transport(毒瘤卡常最大流)
Murphyc
博客等级 码龄10年 13粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值