正题

luogu 1791


题目大意

有n个人,选择第i个人的代价是aia_iai​,如果i,j同时被选那么有贡献wi,jw_{i,j}wi,j​,如果i选了j没选那么有贡献−wi,j-w_{i,j}−wi,j​,问你最大贡献(减去代价)


解题思路

最大权闭合子图模型,考虑网络流

对于第i个点,向s连一条流量为aia_iai​的边,向t连一条∑j=1nwi,j\sum_{j=1}^nw_{i,j}∑j=1n​wi,j​的边(假设所有点都选)

那么考虑选的点与不选的点之间的连边,如果两个点都选,那么有利润wi,jw_{i,j}wi,j​,一个点不选,利润为−wi,j-w_{i,j}−wi,j​,利润差为2wi,jw_{i,j}wi,j​,所以两个点之间连边的流量为2wi,jw_{i,j}wi,j​

最后用总贡献减去最小割就是答案


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 1010
using namespace std;
int n, s, t, x, y, tot, ans, dep[N], head[N];
const int inf = 1000000000;
queue<int>d;
struct rec
{int to, next, f;
}e[N*N+N*2];
void add(int x, int y, int z)
{e[++tot].to = y;e[tot].f = z;e[tot].next = head[x];head[x] = tot;e[++tot].to = x;e[tot].f = 0;e[tot].next = head[y];head[y] = tot;return;
}
bool bfs()
{memset(dep, 0, sizeof(dep));while (!d.empty()) d.pop();dep[s] = 1;d.push(s);while(!d.empty()){int h = d.front();d.pop();for (int i = head[h]; i; i = e[i].next)if (!dep[e[i].to] && e[i].f){dep[e[i].to] = dep[h] + 1;if (e[i].to == t) return true;d.push(e[i].to);}}return false;
}
int dfs(int x, int flow)
{if (x == t) return flow;int rest = 0, k;for (int i = head[x]; i; i = e[i].next)if (dep[e[i].to] == dep[x] + 1 && e[i].f){k = dfs(e[i].to, min(e[i].f, flow - rest));if (!k) dep[e[i].to] = 0;rest += k;e[i].f -= k;e[i^1].f += k;if (rest == flow) return rest;}return rest;
}
int main()
{scanf("%d", &n);s = n + 1;t = n + 2;tot = 1;for (int i = 1; i <= n; ++i){scanf("%d", &x);add(s, i, x);}for (int i = 1; i <= n; ++i){y = 0;for (int j = 1; j <= n; ++j){scanf("%d", &x);if (x) add(i, j, 2 * x);ans += x;y += x;}add(i, t, y);}while(bfs())ans -= dfs(s, inf);printf("%d", ans);return 0;
}

【网络流】人员雇佣(luogu 1791)相关推荐

  1. 人员雇佣 网络流_雇用Java EE开发人员的一些面试问题

    人员雇佣 网络流 互联网上充斥着Java开发人员的面试问题. 这些问题的主要问题是,它们仅证明候选人具有良好的记忆力,并记住所有语法,结构,常量等.对他/她的逻辑推理没有真正的评估. 我在下面列举一些 ...

  2. BZOJ 2039: [2009国家集训队]employ人员雇佣

    二次联通门 : BZOJ 2039: [2009国家集训队]employ人员雇佣 /*BZOJ 2039: [2009国家集训队]employ人员雇佣最小割先全部雇佣每个人向汇点连边后源点分别向i,j ...

  3. bzoj2039[2009国家集训队]employ人员雇佣

    bzoj2039[2009国家集训队]employ人员雇佣 题意: 有N个经理,Ei,j表示i经理对j经理的了解程度,当经理i和经理j同时被雇佣时,利润增加Ei,j*2.同时,雇佣每一个经理都需要花费 ...

  4. BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 1614  Solved: 789 [Subm ...

  5. P1791-[国家集训队]人员雇佣【最大权闭合图】

    正题 题目链接:https://www.luogu.com.cn/problem/P1791 题目大意 有nnn个人,雇佣第iii个需要AiA_iAi​的费用,对于Ei,jE_{i,j}Ei,j​表示 ...

  6. 2017.9.12 人员雇佣 失败总结

    网络流好难啊,还被卡题意了(不卡题意我也不会) 然后强套昨天的图,其实样子基本是对的,,但是实际是错的 这个题的模型就是: 一个点选s有贡献, 两个点同时选s有贡献, 两个点同时不选s无贡献, 两个点 ...

  7. BZOJ 2039 人员雇佣 (最小割)

    题面:BZOJ传送门 网络流的题真神仙= = 大致分为三种情况 选某个人$i$,收益减少$a_{i}$ 选了$i$选了$j$,收益增加$2e_{ij}$ 选了$i$不选$j$,收益减少$e_{ij}$ ...

  8. 平静的纪中生活(2021.7.12~7.22)

    平静的目录 Day 0 凌晨(不要问为什么有这个) 早上 下午 晚上 Day 1 早上 中午 下午 晚上 今天的博客 Day 2 早上 中午 下午 晚上 今天的博客 Day 3 早上 中午 下午 晚上 ...

  9. [补档]2017-7-29 大佬讲课笔记

    网络流 虽然dalao声音不大,但是很好听呢.不过dalao很快的进入正经主题了呢. 基本定义 1. 有n个点,m条有向边,其中源点 s 只有出边,没有入边.汇点 t 只有入边,没有出边. 2. 每条 ...

最新文章

  1. 易企cms文章引用地址写法
  2. 047_Unicode对照表十三
  3. [密码学] 高级加密标准AES
  4. 在MATLAB中读取同一路径下多个txt或mat文件
  5. ellen 纽奥良大学演讲
  6. 取MapString,sitemap中的全部key
  7. 叨叨20220304
  8. MediaPlayer控件的初探
  9. 我和2000万人在B站刷凤凰传奇
  10. HTML把表格链接进下拉菜单,excel表格下拉菜单怎么做
  11. 关于YUV格式的一些总结
  12. [Bzoj2049][Sdoi2008]Cave 洞穴勘测
  13. 积累一些平时制作Excel 表格的常用公式与方法
  14. C++内部链接与外部链接
  15. 使用翻译的neko模块
  16. 腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍
  17. Big Faceless Java PDF Library[BFO]
  18. linux下的pmap命令
  19. 使用SpringBoot的CommandLineRunner遇到的坑
  20. 使用VBA如何将中文字符转换为区位码

热门文章

  1. wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
  2. leetcode:203. 移除链表元素(两种方法)
  3. [Java基础]线程安全的类
  4. 《C++ Primer》7.3.2节练习
  5. Bridge(桥接)--对象结构模式
  6. python中的max_row_Openpyxl max_row和max_column错误地报告了一个较大的figu
  7. git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...
  8. 堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构
  9. 蓝桥杯 子串分值 递推
  10. Dubbo 常见服务治理策略