【学术篇】SDOI2009 最优图像
又是一道辣鸡卡常数题….
luogu上有些题的时限还是有毒的… 最后也只能靠O2过掉了…
不过给我原题当时的2s我随便过给你看嘛, 哪怕评测姬慢50%都没关系的.. 贴一下codevs的截图…
你看最慢的点也就1.07s…… (毕竟程序自带大常数←_←
好了不吐槽了, 我们来分析一下这道题吧…
其实我当时做的时候(好像还是做学校食堂的那次测试?)并不知道这是一道网络流…
然后就写暴力滚粗…
但据说这是一种非常常见的建图方式.. 我们还是分析题目条件.
我们在网络流里面做到的题目都是求和的, 那么我们就要想办法把Π转换为∑.
转换完之后就可以跑最大费用最大流了.那么怎么转换呢?? 用对数!!!
我们高一的时候学过,log(xy)=log x+log y(底大于0且不等于1), 这样我们就可以建边了.
- 每一行, 每一列作为一个点, 分别放在两边.
- 行和列之间连一条流量为1, 费用为交点的概率的对数的边, 表示这个点最多选一次, 选的话取这个概率.
- 源点向每个行对应的点连流量为这一行的黑像素数, 费用为0的边, 表示这一行要选这么多个.
- 每个列对应的点向汇点连流量为这一列的黑像素数, 费用为0的边, 表示这一列要选这么多个.
样例建图大约就是这个样子(好像还并不是很清楚怎么建嘛) (对数的底我就随便取个e算了)
然后费用取反跑费用流就行了. 据说这个题只能用zkw过, 但我的zkw也没过…
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=205;
const int M=23333;
const int INF=0x7f7f7f7f;
inline int gn(int a=0,char c=0){
for(;c<'0'||c>'9';c=getchar());
for(;c>47&&c<58;c=getchar())a=a*10+c-48;return a;
}
int v[N],nxt[M],to[M],fl[M],co[M],tot=1;
void buildedge(int x,int y,int flow,int cost){
to[++tot]=y; nxt[tot]=v[x]; v[x]=tot; fl[tot]=flow; co[tot]=cost;
to[++tot]=x; nxt[tot]=v[y]; v[y]=tot; fl[tot]=0; co[tot]=-cost;
}
int d[N],n,m,s,t,cost,p[N][N],a[N],b[N];
int q[M],H,T,i,j,k;
bool vis[N];
inline bool spfa(int s,int t){
memset(vis,0,sizeof(vis));
memset(d,0x7f,sizeof(d));
d[t]=0; H=0; T=1; vis[t]=1; q[T]=t;
while(H<T){
int x=q[++H]; vis[x]=0;
for(int i=v[x];i;i=nxt[i])
if(fl[i^1]&&d[to[i]]>d[x]-co[i]){
d[to[i]]=d[x]-co[i];
if(!vis[to[i]]) vis[to[i]]=1,q[++T]=to[i];
}
}
return d[s]<INF;
}
int dfs(int x,int mx,int s=0){ vis[x]=1;
if(x==t) return mx; int k;
for(int i=v[x];i;i=nxt[i])
if(!vis[to[i]]&&fl[i]&&d[to[i]]==d[x]-co[i]){
k=::dfs(to[i], mx-s>fl[i]?fl[i]:mx-s);
if(k) cost+=k*co[i],fl[i]-=k,fl[i^1]+=k,s+=k;
if(s==mx) break;
}
return s;
}
int mcmf(int flow=0){
while(::spfa(s, t)){ vis[t]=1;
while(vis[t]){
memset(vis,0,sizeof(vis));
flow+=::dfs(s, INF);
}
} return flow;
}
void findans(){
for(int i=1;i<=n;++i)
for(int j=v[i];j;j=nxt[j])
if(to[j]>n)
p[i][to[j]-n]=!fl[j];
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
putchar(48+p[i][j]);
putchar(10);
}
}
int main(){
n=gn(); m=gn(); s=0; t=n+m+1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
int k=gn();
if(k) ::buildedge(i, j+n, 1, (int)(-log2(k)*2333333));
}
for(int i=1;i<=n;++i)
::buildedge(s, i, gn(), 0);
for(int i=1;i<=m;++i)
::buildedge(i+n, t, gn(), 0);
mcmf(); findans();
}
最后, 卡常数是非常不对的一件事情…或者说我该去化验血统了?
【学术篇】SDOI2009 最优图像的更多相关文章
- P2410 [SDOI2009]最优图像 ZKW最大费用最大流
$ \color{#0066ff}{ 题目描述 }$ 小E在好友小W的家中发现一幅神奇的图画,对此颇有兴趣.它可以被看做一个包含N×M个像素的黑白图像,为了方便起见,我们用0表示白色像素,1表示黑色像 ...
- 【学术篇】SDOI2009 SuperGCD
特别说明: 为了避免以后搬家时的麻烦, 这里的文章继续沿用csdn的风格和分类好了~ Emmmm这个题是一道高精度的模板题啊~ 既然是高精度的裸题, 那我们这些懒人当然是选择:用python啦~ 懒癌 ...
- 【学术篇】SDOI2009 学校食堂
传送门~ 题目大意 先分析\((x\ or\ y)-(x\ and\ y)\), 就是\(x\)和\(y\)中存在的1减去\(x\)和\(y\)中相同的1 *那不就是\(x\ xor\ y\)么←_← ...
- SQL Server调优系列基础篇 - 性能调优介绍
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- SQL Server 调优系列基础篇 - 性能调优介绍
前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...
- PHP 性能分析第三篇: 性能调优实战
注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...
- 第三篇、调优之路 Apache调优
1. 简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...
- 【学术篇】CF833B TheBakery 分治dp+主席树
题目の传送门~ 题目大意: 将\(n\)个蛋糕分成恰好\(k\)份, 求每份中包含的蛋糕的种类数之和的最大值. 这题有两种做法. 第一种是线段树优化dp, 我还没有考虑. 另一种就是分治+主席树. 然 ...
- 【学术篇】luogu3768 简单的数学题(纯口胡无代码)
真是一道"简单"的数学题呢~ 反演题, 化式子. \[ ans=\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j) \\ =\sum_{i=1}^n\sum_{j ...
随机推荐
- 拾遗:nmcli 连接 wifi
... nmcli device wifi list nmcli device wifi connect SSID password PASSWORD ...
- Python脚本轻松实现批量图片重命名
************************************************************************** 摘要:网上爬取的图片名字很混乱,格式也比较多,需要 ...
- 如何省略.jsx文件名
在webpack.config.js文件夹中module.exports中添加: resolve:{ extensions:[".js", ".jsx", &q ...
- winform textbox 不能唤醒windows 平板的软键盘解决办法
这个问题,研究了将近两个小时,baidu,google,好大一会,windows 平板本身的应用程序,必须浏览器,notepad都是可以自动唤起软键盘的,但是我的winfrom 程序就是不可以,起先怀 ...
- AWS lambda DynamoDB api gateway之间的连接
创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...
- struts2注解返回json
Struts2使用注解方式返回Json数据 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Geek_Alex/article/details/788 ...
- python的一个简单日志记录库glog的使用
一. glog的简介 glog所记录的日志信息总是记录到标准的stderr中,即控制台终端. 每一行日志记录总是会添加一个谷歌风格的前缀,即google-style log prefix, 它的形式如 ...
- 召回率、AUC、ROC模型评估指标精要
混淆矩阵 精准率/查准率,presicion 预测为正的样本中实际为正的概率 召回率/查全率,recall 实际为正的样本中被预测为正的概率 TPR F1分数,同时考虑查准率和查全率,二者达到平衡,= ...
- mysql和postgresql查询数据库中哪些表包含某个字段
想知道数据库中哪表含有edu_status字段 mysql> select table_name,column_name from information_schema.columns wh ...
- Shell [[]]详解:检测某个条件是否成立
[[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能 ...