牛客练习赛 小D的剑阵 解题报告
小D的剑阵
题意链接:
https://ac.nowcoder.com/acm/contest/369/F
来源:牛客网
现在你有 \(n\) 把灵剑,其中选择第i把灵剑会得到的 \(w_i\) 攻击力。
于此同时,还有 \(q\) 个约束,每个约束形如:x y v_0 v_1 v_2
\(x\) 和 \(y\) 表示两个物品的编号,如果同时选中可以获得额外 \(v_0\) 的攻击力, 同时不选可以获得额外 \(v_1\) 点攻击力,只选择一个则会扣除 \(v_2\) 的攻击力。
小D想知道剑阵的最大攻击力。
范围
\(1≤n≤10^3,0≤q≤2×10^3,2≤w_i,v_0,v_1,v_2≤7×10^4\),且 \(w_i,v_0,v_1,v_2\) 均为偶数。
数据保证对于任一无序对\((x,y)\)只会有一个约束。
第一次见到类似建模,记录一下
显然是网络流。
我们先把\(w,v_0,v_1\)求和,这样就转换成了减去最小代价
考虑这样表示一个约束

考虑一个割,点被割到\(S\)表示不选,割到\(T\)表示选
然后这个基本情况有四种
- 割\(a,b\),全选 \(a+b=v_1\)
- 割\(f,e\),全不选 \(e+f=v_0+w_A+w_B\)
- 割\(a,c,e\),选\(A\),不选\(B\) \(a+c+e=v_0+v_1+v_2+w_B\)
- 割\(b,d,f\),选\(B\),不选\(A\) \(b+d+f=v_0+v_1+v_2+w_A\)
然后构造一种合法解进行连边
注意一下,构造中含有\(w\)的应该只连一次,所以要把含边权\(w\)的重边一起合并。
Code:
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::min;
const int N=1e3+10;
const int M=3e4+10;
const int inf=0x3f3f3f3f;
int head[N],to[M],Next[M],edge[M],cnt=1;
void add(int u,int v,int w)
{
to[++cnt]=v,edge[cnt]=w,Next[cnt]=head[u],head[u]=cnt;
to[++cnt]=u,edge[cnt]=0,Next[cnt]=head[v],head[v]=cnt;
}
int n,m,s,t,w[N],yuu[N];
int q[N],dep[N],l,r;
bool bfs()
{
memset(dep,0,sizeof dep);
dep[q[l=r=1]=s]=1;
while(l<=r)
{
int now=q[l++];
for(int v,i=head[now];i;i=Next[i])
if(edge[i]&&!dep[v=to[i]])
{
dep[v]=dep[now]+1;
if((q[++r]=v)==t) return true;
}
}
return false;
}
int dfs(int now,int flow)
{
if(now==t) return flow;
int res=flow,bee;
for(int v,i=head[now];i&&res;i=Next[i])
if(edge[i]&&dep[v=to[i]]==dep[now]+1)
{
bee=dfs(v,min(res,edge[i]));
if(!bee) {dep[v]=0;continue;}
res-=bee,edge[i]-=bee,edge[i^1]+=bee;
}
return flow-res;
}
int main()
{
scanf("%d%d",&n,&m);int ans=0;
for(int i=1;i<=n;i++) scanf("%d",w+i),ans+=w[i];
s=n+1,t=s+1;
for(int x,y,v0,v1,v2,a,i=1;i<=m;i++)
{
scanf("%d%d%d%d%d",&x,&y,&v0,&v1,&v2);
ans+=v0+v1;
yuu[x]+=v1>>1,yuu[y]+=v1>>1;
w[x]+=v0>>1,w[y]+=v0>>1;
a=v0+v1+(v2<<1)>>1;
add(x,y,a),add(y,x,a);
}
for(int i=1;i<=n;i++) add(s,i,yuu[i]),add(i,t,w[i]);
int maxflow=0,flow;
while(bfs()) while(flow=dfs(s,inf)) maxflow+=flow;
printf("%d\n",ans-maxflow);
return 0;
}
2019.2.16
牛客练习赛 小D的剑阵 解题报告的更多相关文章
- 牛客练习赛 小A与任务 解题报告
小A与任务 链接: https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 题目描述 小A手头有 \(n\) 份任务,他可以以任意顺序完成这些任务,只有完成当 ...
- 牛客练习赛 小A与最大子段和 解题报告
小A与最大子段和 题意 在一个序列 \(\{a\}\) 里找到一个非空子段 \(\{b\}\), 满足 \(\sum\limits_{i=1}^{|b|}b_i\times i\) 最大 \(n\le ...
- 牛客练习赛 小D的Lemon 解题报告
小D的Lemon 题意 已知 \[ g(x)=\left\{\begin{matrix} 1&,x=1\\ \sum_{i=1}^qk_i&,otherwise \end{matrix ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
- 牛客练习赛42 C 出题的诀窍 (贡献,卡常)
牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...
随机推荐
- sessionStorage和localStorage的区别
JS的本地保存localStorage.sessionStorage用法总结 localStorage.sessionStorage是Html5的特性,IE7以下浏览器不支持 为什么要掌握localS ...
- C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...
- vs2017+opencv4.0.1安装配置详解(win10)
一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...
- nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...
- 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)
一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...
- required: true,el-upload :action="UploadUrl()"
<el-form-item label="所属班级:" prop="Name" :rules="[{ required: true, messa ...
- PHP输入流 php://input 相关【转】
为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input', ‘r').而不是从$_POST中读取,正是因为xml_rpc数据规格是xml,它的Conte ...
- Linux内核读书笔记第三周 调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...
- sho
手工编程:hello world 全部用命令行工具和Notepad编辑器,用手工创建并编译一个C的命令行程序:hello world. public class Hello{ publ ...
- 第三个spring冲刺第1天
在第二阶段,我们的要实现的基本功能都已经基本是实现了,现在在第三阶段,我们会完善算法的改进.容错问题的兼容还有附加的其他功能,例如计时等