BZOJ 4873 寿司餐厅 网络流
最大权闭合子图
1.每个区间收益(i,j)对应一个点 权值为正连S 负连T
2.每个区间收益向其子区间收益(i+1,j)与(i,j-1)对应的两个点连边 容量为INF
3.每个寿司类型对应一个点 连一条边到T 容量为m*w[i]*w[i]
4.每个寿司对应的区间收益点(i,i)连一条边到对应的寿司类型 容量为INF 再连一条边到T 容量为w[i]
最后跑最大流
- //Netflow dumpling
- #include<bits/stdc++.h>
- using namespace std;
- const int MAXN = ;
- const int MAXM = ;
- const int INF = ;
- int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << ], nxt[MAXM << ], f[MAXM << ], ed = , S, T;
- inline void addedge(int u, int v, int cap)
- {
- to[++ed] = v;
- nxt[ed] = Head[u];
- Head[u] = ed;
- f[ed] = cap;
- to[++ed] = u;
- nxt[ed] = Head[v];
- Head[v] = ed;
- f[ed] = ;
- return;
- }
- inline bool BFS()
- {
- int u;
- memset(lev, -, sizeof(lev));
- queue<int>q;
- lev[S] = ;
- q.push(S);
- while (q.size()) {
- u = q.front();
- q.pop();
- for (int i = Head[u]; i; i = nxt[i])
- if (f[i] && lev[to[i]] == -) {
- lev[to[i]] = lev[u] + ;
- q.push(to[i]);
- /*
- if (to[i] == T)
- {
- return 1;
- }
- magic one way optimize
- */
- }
- }
- memcpy(cur, Head, sizeof Head);
- return lev[T] != -;
- }
- inline int DFS(int u, int maxf)
- {
- if (u == T || !maxf) {
- return maxf;
- }
- int cnt = ;
- for (int &i = cur[u], tem; i; i = nxt[i])
- if (f[i] && lev[to[i]] == lev[u] + ) {
- tem = DFS(to[i], min(maxf, f[i]));
- maxf -= tem;
- f[i] -= tem;
- f[i ^ ] += tem;
- cnt += tem;
- if (!maxf) {
- break;
- }
- }
- if (!cnt) {
- lev[u] = -;
- }
- return cnt;
- }
- int Dinic()
- {
- int ans = ;
- while (BFS()) {
- ans += DFS(S, );
- }
- return ans;
- }
- void init(int SS, int TT)
- {
- memset(Head, , sizeof(Head));
- ed = ;
- S = SS;
- T = TT;
- return;
- }
- int n, m, now;
- bool ok[];
- int a[];
- int getid(int x, int y)
- {
- return + n * (x - ) + y;
- }
- int main()
- {
- int ans = ;
- scanf("%d %d", &n, &m);
- S = , T = n * n + ;
- for (int i = ; i <= n; i++) {
- scanf("%d", &a[i]);
- if (!ok[a[i]]) {
- addedge(a[i], T, m * a[i]*a[i]), ok[a[i]] = ;
- }
- addedge(getid(i, i), a[i], INF);
- addedge(getid(i, i), T, a[i]);
- }
- for (int i = ; i <= n; i++) {
- for (int j = i; j <= n; j++) {
- scanf("%d", &now);
- if (now > ) {
- addedge(S, getid(i, j), now);
- ans += now;
- } else {
- addedge(getid(i, j), T, -now);
- }
- if (i != j) {
- addedge(getid(i, j), getid(i + , j), INF);
- addedge(getid(i, j), getid(i, j - ), INF);
- }
- }
- }
- ans -= Dinic();
- printf("%d\n", ans);
- return ;
- }
BZOJ 4873 寿司餐厅 网络流的更多相关文章
- BZOJ 4873 寿司餐厅(最大权闭合图 网络流)
寿司餐厅 时间限制: 1 Sec 内存限制: 512 MB提交: 6 解决: 3[提交][状态][讨论版] 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序 ...
- BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图
链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...
- 洛谷$P3749$ [六省联考2017] 寿司餐厅 网络流
正解:网络流 解题报告: 传送门$QwQ$ 这道题好烦昂,,,就给了好多变量,,,但仔细读一遍题还是能$get$的所以我就不再提取一遍题目大意辣$QwQ$? 显然考虑建两排点,一排收益一排支出然后最小 ...
- [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
[LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...
- BZOJ:4873: [Shoi2017]寿司餐厅
4873: [Shoi2017]寿司餐厅 首先很开心在膜你赛的时候做了出来. 看到数据范围,看到不能dp,看到贡献去重后计算,咦,流? 那就容易了,转最大权闭合子图,每个区间建一个点,取了就一定要取他 ...
- bzoj 4873: [Shoi2017]寿司餐厅 [最小割]
4873: [Shoi2017]寿司餐厅 题意:略 唯一会做的... 一眼最小割 就是最大权闭合子图呀 \(s\rightarrow d_{positive} \rightarrow -d_{negt ...
- 【BZOJ】4873: [Shoi2017]寿司餐厅
[题目]#2146. 「SHOI2017」寿司餐厅 [题意]给定n种寿司的代号,取区间[i,j]的寿司收益是d[i,j]和所有子区间的d,吃了c(c>0)种代号x的寿司的代价是mx^2+cx,给 ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
- bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅
http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美 ...
随机推荐
- 学习docker笔记1
docker是一个能够把开发应用程序自动部署到容器的开源引擎 docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高 ...
- 人工智能_2_特征处理.py
# 特征处理 # 特征预处理:通过统计方法将数据转换为算法需要的数据 # 数值型数据:标准缩放 # 规依法,标准化(常用,适用于当前大数据),缺失值处理(删除,填补中位数平均数,通常按照列填补) # ...
- golang web框架 beego 学习 (五) 配置文件
app.conf: appname = gowebProject httpport = runmode = dev copyrequestbody = true [db] host= localhos ...
- leetcode834 Sum of Distances in Tree
思路: 树形dp. 实现: class Solution { public: void dfs(int root, int p, vector<vector<int>>& ...
- 解决Windows7下virtualbox安装ubuntu出现的0x00000000指令引用0x00000000内存,该内存不能为written问题
公司电脑只能用Windows7,不能用10,也没WSL用,最近想跑个Linux环境,因为之前装docker toolbox装了virtualbox,没道理再装vmware,遂用vbox开始折腾,没想到 ...
- javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())
javascript 数组和对象的浅度复制和深度复制在平常我们用 ‘=’来用一个变量引用一个数组或对象,这里是‘引用’而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3,' ...
- 乐字节Java构造器(构造方法|构造函数)、方法与内存分析
一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造 ...
- pgsql常用操作
pgsql备份: --进入pgsql容器docker exec -it 容器ID bash --备份pgsql /opt/rh/rh-postgresql95/root/usr/bin/pg_dump ...
- TypeScript 枚举
我们常常会有这样的场景,比如与后端开发约定订单的状态开始是0,未结账是1,运输中是2,运输完成是3,已收货是4.这样的纯数字会使得代码缺乏可读性.枚举就用于这样的场景.枚举可以让我们定义一些名字有意义 ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块
包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作. from openpyxl import Workbook from openpyxl impo ...