洛谷P3749 [六省联考2017]寿司餐厅
这几道都是上周llj讲的题,题解也写得十分好了,所以直接贴了几个链接和代码。
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<ctime>
#include<map>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=,inf=0x7fffffff;
typedef long long LL;
using namespace std;
int n,m,s,t,num,D[][],id[][],ans;
map<int,int>mp; template<typename T> void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct edge {
int u,v,fl,cap,nx;
edge(){}
edge(int u,int v,int fl,int cap,int nx):u(u),v(v),fl(fl),cap(cap),nx(nx){}
}e[N]; int fir[N],cur[N],ecnt=,p[N];
void add(int u,int v,int cap) {
e[++ecnt]=edge(u,v,,cap,fir[u]); fir[u]=ecnt;
e[++ecnt]=edge(v,u,,,fir[v]); fir[v]=ecnt;
} int calc(int s,int t) {
int fl=inf;
for(int i=t;i!=s;i=e[p[i]].u)
fl=min(fl,e[p[i]].cap-e[p[i]].fl);
for(int i=t;i!=s;i=e[p[i]].u)
e[p[i]].fl+=fl,e[p[i]^].fl-=fl;
return fl;
} int d[N],c[N];
queue<int>que;
void bfs(int s,int t) {
for(int i=;i<=n;i++) cur[i]=fir[i],d[i]=n,c[i]=;
que.push(t); d[t]=;
while(!que.empty()) {
int x=que.front();
que.pop();
for(int i=fir[x];i;i=e[i].nx) if(e[i].cap==) {
int y=e[i].v;
if(d[y]==n) {
d[y]=d[x]+;
que.push(y);
}
}
}
} int ISAP(int s,int t) {
int res=;
bfs(s,t);
for(int i=;i<=n;i++) c[d[i]]++;
for(int x=s;d[x]<n;) {
if(x==t) {
res+=calc(s,t);
x=s;
}
int ok=;
for(int &i=cur[x];i;i=e[i].nx)
if(e[i].fl<e[i].cap&&d[e[i].v]+==d[x]) {
p[x=e[i].v]=i; ok=; break;
}
if(!ok) {
int M=n; cur[x]=fir[x];
for(int i=fir[x];i;i=e[i].nx) if(e[i].cap>e[i].fl) {
M=min(M,d[e[i].v]+);
}
if(!(--c[d[x]])) break;
c[d[x]=M]++;
if(x!=s) x=e[p[x]].u;
}
}
return res;
} int main() {
read(n); read(m);
s=++num; t=++num; num+=n;
For(i,,n) {
int col; read(col);
if(!mp[col]) {
mp[col]=++num;
add(num,t,m*col*col);
}
add(i+,mp[col],inf);
add(i+,t,col);
}
For(i,,n)
For(j,i,n) {
read(D[i][j]); id[i][j]=++num;
if(D[i][j]>=) {
add(s,num,D[i][j]);
ans+=D[i][j];
}
else add(num,t,-D[i][j]);
add(num,i+,inf);
add(num,j+,inf);
}
For(i,,n)
For(j,i,n) if(i!=j) {
add(id[i][j],id[i+][j],inf);
add(id[i][j],id[i][j-],inf);
}
n=num;
ans-=ISAP(s,t);
printf("%d\n",ans);
return ;
}
洛谷P3749 [六省联考2017]寿司餐厅的更多相关文章
- 洛谷$P3749$ [六省联考2017] 寿司餐厅 网络流
正解:网络流 解题报告: 传送门$QwQ$ 这道题好烦昂,,,就给了好多变量,,,但仔细读一遍题还是能$get$的所以我就不再提取一遍题目大意辣$QwQ$? 显然考虑建两排点,一排收益一排支出然后最小 ...
- P3749 [六省联考2017]寿司餐厅 最小割
\(\color{#0066ff}{ 题目描述 }\) Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 \(n\) 种寿司,第 \(i\) 种寿司有一个代号 \( ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
- 洛谷 P3747 [六省联考2017]相逢是问候 解题报告
P3747 [六省联考2017]相逢是问候 题目描述 \(\text {Informatik verbindet dich und mich.}\) 信息将你我连结. \(B\) 君希望以维护一个长度 ...
- 【洛谷P3749】[六省联考2017]寿司餐厅(网络流)
洛谷 题意: 给出\(n\)份寿司,现可以选取任意多次连续区间内的寿司,对于区间\([l,r]\),那么贡献为\(\sum_{i=l}^r \sum_{j=i}^rd_{i,j}\)(对于相同的\(d ...
- bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅
http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美 ...
- [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)
4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 490 Solved: 350[Submit][Status ...
- 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)
传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...
- 洛谷P3746 [六省联考2017]组合数问题
题目描述 组合数 C_n^mCnm 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...
随机推荐
- cf1147
C——筛法 #include<bits/stdc++.h> using namespace std; ]; int main(){ cin>>n; ; ;i<=n;i++ ...
- js面试总结2
原型和原型链: 题目,知识点,解答: 1.如何准确地判断一个变量是数组类型 2.写一个原型链继承的例子 3.描述new一个对象的过程 4.zepto(或其他框架)源码中如何使用原型链. 知识点 构造函 ...
- System.Web.Mvc.JavaScriptResult.cs
ylbtech-System.Web.Mvc.JavaScriptResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...
- 国外主机如何ICP备案
想都不要想了,无法备案. 因为,备案是在主机服务器提供商处的备案平台提交申请,国外的主机服务商是没有这种平台服务的.(跟你域名在哪儿买的没关系) 下面,把昨天折腾到半夜的过程记录一下,希望可以帮到需要 ...
- uoj#370【UR #17】滑稽树上滑稽果
题目 低智选手果然刷不动uoj 首先考虑一下构造一棵树显然是骗你玩的,按位与这个东西越做越小,挂到链的最下面显然不会劣于挂到之前的某一个点下面,所以我们只需要求一个排列使得答案最小就好了 设\(A=\ ...
- Neo4j全文检索
全文检索基本概念 搜索 搜索这个行为是用户与搜索引擎的一次交互过程,用户需要找一些数据,他提供给搜索引擎一些约束条件.搜索引擎通过约束条件抽取一些结果给用户 搜索引擎 搜索引擎存在的目的是存储,查找和 ...
- selenium基础(脚本模块化)
selenium基础(脚本模块化)
- Lotus Blossom 行动分析
1 漏洞介绍 1.1 代号 - Lotus Blossom行动 漏洞利用率很高 从2012 -2015或者说最近都还在使用 CVE-2012-0158 Lotus Blossom--莲花: 描述了对东 ...
- Lua程序设计之字符串精要
(摘自Lua程序设计) 基本: Lua语言的字符串是一串字节组成的序列. 在Lua语言中,字符使用8个比特位来存储. Lua语言中的字符串可以存储包括空字符在内的所有数值代码,这意味着我们可以在字符串 ...
- leetcode-109-有序链表转二叉搜索树
---恢复内容开始--- 题目描述: 方法一:O(n) O(n) class Solution: def sortedListToBST(self, head: ListNode) -> Tre ...