Gym - 102346GGetting Confidence

题意:n*n的格子,每个格子上有一个数,要求每行每列都只能拿一个数,使得乘积最大,然后输出每列选择的是第几行的数。

如果是加法的话,那么很明显,就是一个网络流。可是,现在是乘法怎么办,很简单,直接取log,那么乘法便转换成了加法,然后就可以建图。

每行每列只能取一个数,就相当于行列是拆开的点,因为需要输出的是列的信息,那么源点向每一列建一条流量为1,费用为0的边,而每一行向汇点建一条流量为1,费用为0的边。

再对于每个格子,每一列向它这一列的格子建一条流量为1,费用为0的点,而每个格子向它所在的行建一条流量为1,费用为-log(格子上的数)的边。

最后跑一遍最小费用最大流,看一下每一列的那条边流量为0

 #include<cstdio>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
const int N=2e4+,M=1e6+,inf=1e9+;
struct Side{
int v,ne,w;
double val;
}S[M<<];
double dis[N];
int n,sn,sb,se,head[N],vis[N],flow[N],lu[N];
void init(){
sn=;
sb=;se=n*n+*n+;
for(int i=sb;i<=se;i++) head[i]=-;
}
void add(int u,int v,int w,double val){
S[sn].w=w;S[sn].val=val;
S[sn].v=v;S[sn].ne=head[u];
head[u]=sn++;
}
void addE(int u,int v,int w,double val){
add(u,v,w,val);add(v,u,,-val);
}
bool spfa(){
queue<int> q;
for(int i=sb;i<=se;i++){
dis[i]=inf;
vis[i]=;
flow[i]=inf;
lu[i]=-;
}
dis[sb]=;
vis[sb]=;
q.push(sb);
int u,v;
while(!q.empty()){
u=q.front();q.pop();vis[u]=;
for(int i=head[u];~i;i=S[i].ne){
v=S[i].v;
if(S[i].w>&&dis[v]>dis[u]+S[i].val){
lu[v]=i;
dis[v]=dis[u]+S[i].val;
flow[v]=min(flow[u],S[i].w);
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
return dis[se]!=inf;
}
void mfml(){
int ans=,ansc=;
while(spfa()){
ans+=flow[se];
ansc+=flow[se]*dis[se];
for(int i=lu[se];~i;i=lu[S[i^].v]){
S[i].w-=flow[se];
S[i^].w+=flow[se];
}
}
}
int main(){
while(~scanf("%d",&n)){
init();;
for(int i=;i<=n;i++){
addE(sb,n*n+n+i,,0.0);
addE(n*n+i,se,,0.0);
}
for(int i=,x;i<=n;i++){
for(int j=;j<=n;j++){
scanf("%d",&x);
addE(n*n+n+j,(i-)*n+j,,0.0);
addE((i-)*n+j,n*n+i,,-log(1.0*x));
}
}
mfml();
for(int i=;i<=n;i++)
for(int j=head[n*n+n+i];~j;j=S[j].ne){
if(S[j].w||S[j].v==sb) continue;
printf("%d%c",(S[j].v-)/n+," \n"[i==n]);
break;
}
}
return ;
}

log转乘为加

Gym - 102346G Getting Confidence 最小费用最大流的更多相关文章

  1. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  2. bzoj1927最小费用最大流

    其实本来打算做最小费用最大流的题目前先来点模板题的,,,结果看到这道题二话不说(之前打太多了)敲了一个dinic,快写完了发现不对 我当时就这表情→   =_=你TM逗我 刚要删突然感觉dinic的模 ...

  3. ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

    将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...

  4. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  5. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  6. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

  7. hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***

    题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,          每个逮捕队伍在每个城市可以选 ...

  8. UVa11082 Matrix Decompressing(最小费用最大流)

    题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...

  9. UVa12092 Paint the Roads(最小费用最大流)

    题目大概说一个n个点m条带权有向边的图,要给边染色,染色的边形成若干个回路且每个点都恰好属于其中k个回路.问最少要染多少边权和的路. 一个回路里面各个点的入度=出度=1,那么可以猜想知道各个点如果都恰 ...

随机推荐

  1. 基本数据类型和string的转换

  2. html页面在苹果手机内,safari浏览器,微信中滑动不流畅问题解决方案

    1. -webkit-overflow-scrolling:touch是什么? MDN上是这样定义的: -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效 ...

  3. 详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本(转)

    原文:https://www.jb51.net/article/156927.htm

  4. 【转载】C#指定文件夹下面的所有内容复制到目标文件夹下面

    在涉及到文件夹操作的过程中,有时候需要将文件夹下的所有内容复制拷贝到另一个文件夹,在C#的开发中有时候会遇到这个功能需求将指定文件夹下所有的内容复制到另一个文件夹,这个过程需要遍历所有的文件和目录.此 ...

  5. 【转载】C#通过IndexOf方法判断某个字符串是否包含在另一个字符串中

    C#开发过程中针对字符串String类型的操作是常见操作,有时候需要判断某个字符串是否包含在另一个字符串,此时可以使用IndexOf方法以及Contain方法来实现此功能,Contain方法返回Tru ...

  6. requests模块的基本用法

    requests 什么是requests模块 python中封装好的一个基于网络请求的模块 作用 用来模拟浏览器发送请求 环境安装 pip install requests 编码流程 指定 url 发 ...

  7. iOS 如何判断一个点在某个指定区域中

    在iOS 开发中会遇到 判断位置的情况 iOS 自己都有函数实现的这些功能. 判断一个点是否在这个rect区域中 bool CGRectContainsPoint(CGRect rect,CGPoin ...

  8. 在浏览器中输入www.taobao.com后执行的全部过程

    >>>点击网址后,应用层的DNS协议会将网址解析为IP地址: DNS查找过程: 1.        浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程 ...

  9. Python-共享引用

    A会改变么? 下面三小段代码,A的值都会改变么? >>> A = "spam" >>> B = A >>> B = " ...

  10. Sublime Text 解决 Unable to download XXX 问题

    Sublime Text 安装插件报错: Package Control Unable to download XXX. Please view the console for more detail ...