首页 > 其他分享 >P4177 [CEOI2008] order

P4177 [CEOI2008] order

时间:2023-12-13 20:24:32浏览次数:29  
标签:cnt int st define P4177 include order CEOI2008 dis

题意

给定 \(n\) 个工作,\(m\) 个机器。

每个工作需要若干机器获得 \(s_i\) 的奖励。

机器可以选择租和买。租只能在当前工作内使用。

Sol

考虑在最大权闭合子图上面改改。

发现直接把工作往汇点连买的权值就完事了。

Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <array>
#include <queue>
/* #define int long long */
#define pii pair <int, int>
using namespace std;
#ifdef ONLINE_JUDGE

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf;

#endif
int read() {
	int p = 0, flg = 1;
	char c = getchar();
	while (c < '0' || c > '9') {
		if (c == '-') flg = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		p = p * 10 + c - '0';
		c = getchar();
	}
	return p * flg;
}
void write(int x) {
	if (x < 0) {
		x = -x;
		putchar('-');
	}
	if (x > 9) {
		write(x / 10);
	}
	putchar(x % 10 + '0');
}

#define fi first
#define se second

const int N = 1e5 + 5, M = 2e7 + 5, inf = 2e9;

namespace G {

array <int, N> fir;
array <int, M> nex, to, cap;
int cnt = 1;
void add(int x, int y, int z) {
	cnt++;
	nex[cnt] = fir[x];
	to[cnt] = y;
	cap[cnt] = z;
	fir[x] = cnt;
}
void _add(int x, int y, int z) {
	add(x, y, z);
	add(y, x, 0);
}

}

namespace Mfl {

array <int, N> cur, dis;
queue <int> q;

bool bfs(pii st) {
	dis.fill(-1), dis[st.fi] = 0;
	q.push(st.fi);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		for (int i = G::fir[u]; i; i = G::nex[i]) {
			if (!G::cap[i] || ~dis[G::to[i]]) continue;
			dis[G::to[i]] = dis[u] + 1, q.push(G::to[i]);
		}
	}
	return ~dis[st.se];
}

int dfs(int x, int augcd, pii st) {
	if (x == st.se) return augcd;
	int augc = augcd;
	for (int &i = cur[x]; i; i = G::nex[i]) {
		if (!G::cap[i] || dis[G::to[i]] <= dis[x]) continue;
		int flow = dfs(G::to[i], min(augc, G::cap[i]), st);
		augc -= flow;
		G::cap[i] -= flow, G::cap[i ^ 1] += flow;
		if (!augc) break;
	}
	return augcd - augc;
}

int dinic(pii st) {
	int ans = 0;
	while (bfs(st)) {
		copy(G::fir.begin(), G::fir.end(), cur.begin());
		ans += dfs(st.fi, inf, st);
	}
	return ans;
}

}

signed main() {
	int n = read(), m = read();
	int ans = 0;
	pii st = make_pair(n + m + 1, n + m + 2);
	for (int i = 1; i <= n; i++) {
		int x = read(), k = read();
		ans += x;
		while (k--) {
			int u = read(), v = read();
			G::_add(i, n + u, v);
		}
		G::_add(st.fi, i, x);
	}
	for (int i = 1; i <= m; i++)
		G::_add(i + n, st.se, read());
	write(ans - Mfl::dinic(st)), puts("");
	return 0;
}

标签:cnt,int,st,define,P4177,include,order,CEOI2008,dis
From: https://www.cnblogs.com/cxqghzj/p/17899835.html

相关文章

  • Docker容器中配置和启用Java Flight Recorder(JFR)
    1.简介和背景在Java应用程序性能调优中,JavaFlightRecorder(JFR)是一个非常强大的工具。它能够实时收集Java应用程序的运行数据,提供有关性能问题的深入见解。在Docker容器中使用JFR,可以更轻松地管理和监控应用程序性能。2.JFR的基本概念和工作原理JFR是Java的一项特性,它通过事件记......
  • three.js 使用 sortObjects 和 renderOrder 处理网格修改后覆盖模型的问题
    问题效果:目标效果处理此问题首先需要了解three的渲染机制:渲染机制threejs的渲染器是基于webGL的。它的渲染机制是根据物体离照相机的距离来控制和进行渲染的。也就是说,它根据物体的空间位置进行排序,然后根据这个顺序来渲染物体。对于透明的物体,是按照从最远到最近的顺序进行......
  • Border 基本使用
    Border基本使用1单线效果  代码:<BorderGrid.Row="0"BorderThickness="0,0,0,1"BorderBrush="Red"/>说明:BorderThickness="0,0,0,1"可以分别设置四条边,顺序是:左上右下2虚线效果  代码:<BorderGrid.Row="0"BorderThick......
  • 记录一次MySQL多表查询,order by不走索引的情况.
    首先是表结构,部分字段脱敏已删除 CREATETABLE`log_device_heart`(`id`intunsignedNOTNULLAUTO_INCREMENT,`device_number`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`time_periods_begin`datetimeNOTNULL,`time_peri......
  • 一个查看 SAP CRM One Order 运行时生成的应用日志(Application Log)的小工具
    方法参数定义:方法源代码:METHODGET_ORDER_ERROR_MESSAGE_OPT.DATA:ls_log_filterTYPEbal_s_lfil,ls_extnumberTYPEbal_s_extn,ls_objectLIKEls_extnumber,ls_subobjectLIKEls_extnumber,lt_log_headerTYPEbalhdr_t,......
  • Oracle Hint(提示)之ORDERED
    ORDERED提示的作用和使用方法ORDERED提示是指导优化器,按照FROM子句中表出现的次序来访问。ORDERED提示的使用语法如下图所示:下面,我们通过实验来说明施加该提示时,优化器是如何选择表的访问次序的。测试验证首先,我们创建两个测试表TAB1、TAB2:并在其上收集统计信息,如下图所示:然后我们......
  • mybatis plus order by 不支持convert函数
    最近业务上有个需求,要按照企业名称中文进行排序显示。项目使用的是mybatisplus+mysql从网上看到的排序解决方法是使用mysql的convert函数:select*from客户表where***orderbyconvert(`企业名称`usingGBK);为什么要使用convert函数那?因为一般使用的数据编码是utf-8,m......
  • 10-基础SQL-DQL(数据查询语言)-排序查询(ORDER BY)
    DQL-介绍(常用)DQL英文全称是DataQueryLanguage(数据查询语言),数据查询语言用来查询数据库中表的记录查询关键字:SELECTDQL-语法......
  • 封装实现unordered_map和set
    什么是哈希思想首先哈希是一个关联式容器,各个数据之间是具有关系的,和vector那些序列式容器不一样。首先unordered_map中的迭代器是一个单向的迭代器。其次在unorderede_map和set中是无序的(因为底层不是红黑树,而是哈希了)不再进行排序了。用法和set/map一样(除了不能使用--之外)。然后......
  • bgp:边界网关协议 border gateway protocol
    基础:1.作用范围:作用在AS之间:EGP------>BGP:路由条目数量较多,相对不安全(单播,GTSM TTL=1\没有被动接口),使用TCP底层,路由更新方式,增量更新,只要是路由表里存在的network,import,着眼点传递路由控制路由,单进程,为大型网络设计,很多属性,可以跨设备建立邻居关系,默认不负载,BGP黑洞,BGP排错......