又是一道辣鸡卡常数题….
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 最优图像的更多相关文章

  1. P2410 [SDOI2009]最优图像 ZKW最大费用最大流

    $ \color{#0066ff}{ 题目描述 }$ 小E在好友小W的家中发现一幅神奇的图画,对此颇有兴趣.它可以被看做一个包含N×M个像素的黑白图像,为了方便起见,我们用0表示白色像素,1表示黑色像 ...

  2. 【学术篇】SDOI2009 SuperGCD

    特别说明: 为了避免以后搬家时的麻烦, 这里的文章继续沿用csdn的风格和分类好了~ Emmmm这个题是一道高精度的模板题啊~ 既然是高精度的裸题, 那我们这些懒人当然是选择:用python啦~ 懒癌 ...

  3. 【学术篇】SDOI2009 学校食堂

    传送门~ 题目大意 先分析\((x\ or\ y)-(x\ and\ y)\), 就是\(x\)和\(y\)中存在的1减去\(x\)和\(y\)中相同的1 *那不就是\(x\ xor\ y\)么←_← ...

  4. SQL Server调优系列基础篇 - 性能调优介绍

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  5. SQL Server 调优系列基础篇 - 性能调优介绍

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  6. PHP 性能分析第三篇: 性能调优实战

    注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或  PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...

  7. 第三篇、调优之路 Apache调优

    1.  简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...

  8. 【学术篇】CF833B TheBakery 分治dp+主席树

    题目の传送门~ 题目大意: 将\(n\)个蛋糕分成恰好\(k\)份, 求每份中包含的蛋糕的种类数之和的最大值. 这题有两种做法. 第一种是线段树优化dp, 我还没有考虑. 另一种就是分治+主席树. 然 ...

  9. 【学术篇】luogu3768 简单的数学题(纯口胡无代码)

    真是一道"简单"的数学题呢~ 反演题, 化式子. \[ ans=\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j) \\ =\sum_{i=1}^n\sum_{j ...

随机推荐

  1. 拾遗:nmcli 连接 wifi

    ... nmcli device wifi list nmcli device wifi connect SSID password PASSWORD ...

  2. Python脚本轻松实现批量图片重命名

    ************************************************************************** 摘要:网上爬取的图片名字很混乱,格式也比较多,需要 ...

  3. 如何省略.jsx文件名

    在webpack.config.js文件夹中module.exports中添加: resolve:{ extensions:[".js", ".jsx", &q ...

  4. winform textbox 不能唤醒windows 平板的软键盘解决办法

    这个问题,研究了将近两个小时,baidu,google,好大一会,windows 平板本身的应用程序,必须浏览器,notepad都是可以自动唤起软键盘的,但是我的winfrom 程序就是不可以,起先怀 ...

  5. AWS lambda DynamoDB api gateway之间的连接

    创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...

  6. struts2注解返回json

    Struts2使用注解方式返回Json数据 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Geek_Alex/article/details/788 ...

  7. python的一个简单日志记录库glog的使用

    一. glog的简介 glog所记录的日志信息总是记录到标准的stderr中,即控制台终端. 每一行日志记录总是会添加一个谷歌风格的前缀,即google-style log prefix, 它的形式如 ...

  8. 召回率、AUC、ROC模型评估指标精要

    混淆矩阵 精准率/查准率,presicion 预测为正的样本中实际为正的概率 召回率/查全率,recall 实际为正的样本中被预测为正的概率 TPR F1分数,同时考虑查准率和查全率,二者达到平衡,= ...

  9. mysql和postgresql查询数据库中哪些表包含某个字段

    想知道数据库中哪表含有edu_status字段   mysql> select table_name,column_name from information_schema.columns wh ...

  10. Shell [[]]详解:检测某个条件是否成立

    [[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立. test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好:test 做不到的,[[ ]] 还能 ...