博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ2127]happiness
阅读量:6642 次
发布时间:2019-06-25

本文共 657 字,大约阅读时间需要 2 分钟。

$\newcommand{\edge}[1]{\mathop\rightarrow\limits^{#1}}$有一些求最大权值的问题可以先全部选择,再考虑用尽可能小的代价删除某些不合法的选择,转化为最小割

有一个来自的极妙的建图的方法:

考虑两个人$x,y$,假设$a_i$表示$i$选文科的贡献,$b_i$表示$i$选理科的贡献,$c_{i,j}$表示$i,j$都选文科的贡献,$d_{i,j}$表示$i,j$都选理科的贡献,我们这样建图

答案是输入中的所有贡献之和减去最小割

对于$S\edge{a_x}x\edge{b_x}T$这样的路径,有且仅有一条边会被割掉,对应着选另一科

再考虑两个人$x,y$,如果割掉$a_x,a_y$,那么剩下的图中最小割只能是$c_{x,y}$,恰好对应两人都选理的情况

如果割掉$b_x,b_y$,那么剩下的图中最小割只能是$d_{x,y}$,恰好对应两人都选文的情况

如果割掉$a_x,b_y$或$a_y,b_x$,那么$c_{x,y},d_{x,y}$都会被割掉,对应着两人分选两科的情况

不得不说建图是非常巧妙的,感觉自己没脑子来想这么牛逼的建图==

#include
#include
const int inf=2147483647;int min(int a,int b){return a

转载于:https://www.cnblogs.com/jefflyy/p/8906127.html

你可能感兴趣的文章
iOS开发-常见宏定义
查看>>
Git合并分支或者冲突
查看>>
C# 通过反射实现类似MVC路由的机制
查看>>
nodejs 中自定义事件
查看>>
转:PrintWriter中write与println方法的区别
查看>>
win7 下 arp 绑定mac和Ip
查看>>
VS2012程序打包部署详解
查看>>
Linux:fdisk
查看>>
浮动与清除浮动
查看>>
解构赋值,reset参数,扩展运算符,class,import、export
查看>>
Ext.js create store
查看>>
MySQL授权
查看>>
HTML中汉字空格占位符
查看>>
移动端边框1px
查看>>
下拉加载更多
查看>>
Leetcode | Sort Colors
查看>>
video.js播放rtmp流2
查看>>
类欧几里得算法
查看>>
2013 Multi-University Training Contest 5 部分解题报告
查看>>
IP TCP HTTP Socket的区别
查看>>