luogu P4014 分配问题
简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可
- #include<bits/stdc++.h>
- using namespace std;
- #define lowbit(x) ((x)&(-x))
- typedef long long LL;
- const int maxm = 2e4+;
- const int INF = 0x3f3f3f3f;
- struct edge{
- int u, v, cap, flow, cost, nex;
- } edges[maxm];
- int head[maxm], cur[maxm], cnt, fa[], d[], n, val[][];
- bool inq[];
- void init() {
- memset(head, -, sizeof(head));
- }
- void add(int u, int v, int cap, int cost) {
- edges[cnt] = edge{u, v, cap, , cost, head[u]};
- head[u] = cnt++;
- }
- void addedge(int u, int v, int cap, int cost) {
- add(u, v, cap, cost), add(v, u, , -cost);
- }
- bool spfa(int s, int t, int &flow, LL &cost) {
- for(int i = ; i <= *n+; ++i) d[i] = INF; //init()
- memset(inq, false, sizeof(inq));
- d[s] = , inq[s] = true;
- fa[s] = -, cur[s] = INF;
- queue<int> q;
- q.push(s);
- while(!q.empty()) {
- int u = q.front();
- q.pop();
- inq[u] = false;
- for(int i = head[u]; i != -; i = edges[i].nex) {
- edge& now = edges[i];
- int v = now.v;
- if(now.cap > now.flow && d[v] > d[u] + now.cost) {
- d[v] = d[u] + now.cost;
- fa[v] = i;
- cur[v] = min(cur[u], now.cap - now.flow);
- if(!inq[v]) {q.push(v); inq[v] = true;}
- }
- }
- }
- if(d[t] == INF) return false;
- flow += cur[t];
- cost += 1LL*d[t]*cur[t];
- for(int u = t; u != s; u = edges[fa[u]].u) {
- edges[fa[u]].flow += cur[t];
- edges[fa[u]^].flow -= cur[t];
- }
- return true;
- }
- int MincostMaxflow(int s, int t, LL &cost) {
- cost = ;
- int flow = ;
- while(spfa(s, t, flow, cost));
- return flow;
- }
- void build_graph(int f) {
- init();
- int s = , t = *n+;
- for(int i = ; i <= n; ++i) {
- addedge(s, i, , );
- for(int j = ; j <= n; ++j) {
- addedge(i, j+n, , f*val[i][j]);
- }
- }
- for(int i = ; i <= n; ++i)
- addedge(i+n, t, , );
- }
- void run_case() {
- cin >> n;
- int s = , t = *n+;
- for(int i = ; i <= n; ++i)
- for(int j = ; j <= n; ++j)
- cin >> val[i][j];
- build_graph();
- LL cost = ;
- MincostMaxflow(s, t, cost);
- cout << cost << "\n";
- build_graph(-);
- cost = ;
- MincostMaxflow(s, t, cost);
- cout << -cost;
- }
- int main() {
- ios::sync_with_stdio(false), cin.tie();
- run_case();
- cout.flush();
- return ;
- }
luogu P4014 分配问题的更多相关文章
- 洛谷P4014 分配问题【最小/大费用流】题解+AC代码
洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...
- 洛谷——P4014 分配问题
P4014 分配问题 题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn 个人做的分配方案, ...
- Luogu P4014 「 网络流 24 题 」分配问题
解题思路 还是建立超级源点和超级汇点,又因为题目给出规定一个人只能修一个工件,所以建图的时候还要讲容量都设为$1$. 人的编号是$1\rightarrow n$,工件的编号是$n+1\rightarr ...
- 洛谷P4014分配问题——网络流24题
题目:https://www.luogu.org/problemnew/show/P4014 最大/小费用最大流裸题. 代码如下: #include<iostream> #include& ...
- P4014 分配问题 网络流
题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn个人做的分配方案,使产生的总效益最大. 输 ...
- 洛谷P4014 分配问题(费用流)
传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamot ...
- P4014 分配问题
\(\color{#0066ff}{题目描述}\) 有 \(n\) 件工作要分配给 \(n\) 个人做.第 \(i\) 个人做第 \(j\) 件工作产生的效益为 \(c_{ij}\) .试设计一个将 ...
- 洛谷 P4014 分配问题 【最小费用最大流+最大费用最大流】
其实KM更快--但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一 ...
- 洛谷P4014 分配问题(费用流)
题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn 个人做的分配方案,使产生的总效益最大. ...
随机推荐
- 安卓基础(Navigation)
今天学习了简单的Navigation:页面导航. 页面导航的简单例子: MainAcitivity: package com.example.navigation; import android.su ...
- HTML5 canvas自制画板
找到一个画板的插件,很好用,点击下载 ,页面很简单,但是呢,貌似不适用于手机端,,,
- [踩坑记录] windows10 应用商店打不开 代码: 0x80131500
在某博客看到的方法,供参考,可以尝试一下,我的也是这么解决的1.打开“运行”输入 inetcpl.cpl (“WINDOWS”+“R”键,输入 inetcpl.cpl亦可)2.点开高级往下拉,勾上&q ...
- 吴裕雄 python 神经网络——TensorFlow 完整神经网络样例程序
import tensorflow as tf from numpy.random import RandomState batch_size = 8 w1= tf.Variable(tf.rando ...
- AspectRatio图片的宽高比、Card 卡片组件
一.AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度 ...
- 组件向外暴露v-model绑定的参数
<template> <div class="search-box"> <i class="icon-search">< ...
- mysql 默认信息
泰基MYSQL默认信息 登录名1-------默认用户 名字:root 密码:123 登录名2-------APP对应的数据库 名字:hotekey 密码:8888
- 杭电 1059 Dividing
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- stm32 串口发送字符串丢失第一个字节
使用stm32f103调试串口通讯时,上电后发送的字符串的第一个字节丢失. 发送数据GpuSend("SPG(2);"); 接收端收到的数据为:PG(2);,第一个字符丢失. 出现 ...
- nginx反向代理实战之轮询、Ip_hash、权重
实验环境 192.168.200.111 web1 centos7 192.168.200.112 web2 centos7 192.168.200.113 wev3 centos7 三台主机环境: ...