2018.10.14 loj#6012. 「网络流 24 题」分配问题(费用流)
传送门
费用流水题。
依然是照着题意模拟建边就行了。
为了练板子又重新写了一遍费用流。
代码:
#include<bits/stdc++.h>
#define N 305
#define M 90005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n;
struct edge{int v,next,c,w;};
struct MCMF{
int first[N],d[N],pred[N],pos[N],flow[N],s,t,cnt;
edge e[M];
bool in[N];
inline void init(){memset(first,-1,sizeof(first)),cnt=-1,s=0,t=n*2+1;}
inline void addedge(int u,int v,int c,int w){e[++cnt].v=v,e[cnt].c=c,e[cnt].w=w,e[cnt].next=first[u],first[u]=cnt;}
inline void add(int u,int v,int c,int w){addedge(u,v,c,w),addedge(v,u,0,-w);}
inline bool spfa1(){
queue<int>q;
for(int i=1;i<=t;++i)d[i]=0x3f3f3f3f;
d[s]=0,pred[t]=-1,flow[s]=0x3f3f3f3f,in[s]=1,q.push(s);
while(!q.empty()){
int x=q.front();
q.pop(),in[x]=false;
for(int i=first[x];~i;i=e[i].next){
int v=e[i].v;
if(e[i].c&&d[v]>d[x]+e[i].w){
d[v]=d[x]+e[i].w,flow[v]=min(flow[x],e[i].c),pred[v]=x,pos[v]=i;
if(!in[v])in[v]=1,q.push(v);
}
}
}
return d[t]!=0x3f3f3f3f;
}
inline int solve1(){
int ret=0;
for(int w=t;spfa1();w=t){
ret+=d[t];
while(w!=s)e[pos[w]].c-=flow[t],e[pos[w]^1].c+=flow[t],w=pred[w];
}
return ret;
}
inline bool spfa2(){
queue<int>q;
for(int i=1;i<=t;++i)d[i]=-0x3f3f3f3f;
d[s]=0,pred[t]=-1,flow[s]=0x3f3f3f3f,in[s]=1,q.push(s);
while(!q.empty()){
int x=q.front();
q.pop(),in[x]=false;
for(int i=first[x];~i;i=e[i].next){
int v=e[i].v;
if(e[i].c&&d[v]<d[x]+e[i].w){
d[v]=d[x]+e[i].w,flow[v]=min(flow[x],e[i].c),pred[v]=x,pos[v]=i;
if(!in[v])in[v]=1,q.push(v);
}
}
}
return d[t]!=-0x3f3f3f3f;
}
inline int solve2(){
int ret=0;
for(int w=t;spfa2();w=t){
ret+=d[t];
while(w!=s)e[pos[w]].c-=flow[t],e[pos[w]^1].c+=flow[t],w=pred[w];
}
return ret;
}
}mcmf1,mcmf2;
int main(){
n=read(),mcmf1.init(),mcmf2.init();
for(int i=1;i<=n;++i)mcmf1.add(mcmf1.s,i,1,0),mcmf1.add(i+n,mcmf1.t,1,0),mcmf2.add(mcmf2.s,i,1,0),mcmf2.add(i+n,mcmf2.t,1,0);
for(int val,i=1;i<=n;++i)for(int j=1;j<=n;++j)val=read(),mcmf1.add(i,j+n,1,val),mcmf2.add(i,j+n,1,val);
cout<<mcmf1.solve1()<<'\n'<<mcmf2.solve2();
return 0;
}
2018.10.14 loj#6012. 「网络流 24 题」分配问题(费用流)的更多相关文章
- 2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)
传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1和i2i_2i2,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1),(i2, ...
- 2018.10.14 loj#6011. 「网络流 24 题」运输问题(费用流)
传送门 费用流入门题. 直接按照题意模拟. 把货物的数量当做容量建边. 然后跑一次最小费用流和最大费用流就行了. 代码: #include<bits/stdc++.h> #define N ...
- 【刷题】LOJ 6012 「网络流 24 题」分配问题
题目描述 有 \(n\) 件工作要分配给 \(n\) 个人做.第 \(i\) 个人做第 \(j\) 件工作产生的效益为 \(c_{ij}\) .试设计一个将 \(n\) 件工作分配给 \(n\) ...
- 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)
传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...
- 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)
传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...
- Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)
Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...
- 【LOJ】 #6012. 「网络流 24 题」分配问题
题解 又写了一遍KM算法,这题刚好是把最大最小KM拼在一起写的,感觉比较有记录价值 感觉KM始终不熟啊QAQ 算法流程大抵如下,原理就是每次我们通过减少最少的匹配量达成最大匹配,所以获得的一定是最大价 ...
- 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题
题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...
- [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划
[luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...
随机推荐
- jap_spring
jar包 applicationContent.xml <?xml version="1.0" encoding="UTF-8"?> <bea ...
- IP 别名和辅助 IP 地址
https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao
- as3 去掉字符串空白问题
去掉内容的所有空白 function trim(str:String):String { })/g,""); } //[ ]内是一个中文空格一个英文空格 {}是说匹配一个到多个 / ...
- vc 读xml文件 宏
自定义FOREACH循环,便于coding 在指定xml的nodelist b中遍历每个节点 #define FOREACH_NODE(a,b)\ long cnt = 0; \ CComPtr< ...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
今天学习spring+cxf的时候遇到一个问题:在web.xml中配置了spring的上下文监听器: <listener> <listener-class>org.spring ...
- hibernate hql limit的实现方式
query.setFirstResult(startIndex);//开始索引query.setMaxResults(maxSize);//取几条 如 limit 1,5HQL:query.setFi ...
- IE下设置body{overflow:hidden;}失效Bug
问题重现: <p>There are no scrollbars on this page in sane browsers</p> html, body, p { margi ...
- 条件语句;for循环 嵌套复习
//打印数字,0,1,8,10,12,每一个数单独占一行 //在全部数字打印完毕之后在打印数字的个数和所有数的和 int count = 0; int sum = 0; for (int i = 0; ...
- MapReduce超时原因(Time out after 300 secs)
目前碰到过三种原因导致 Time out after 300 secs. 1. 死循环 这是最常见的原因.显式的死循环很容易定位,隐式的死循环就比较麻烦了,比如正则表达式.曾经用一个网上抄来的邮箱正则 ...
- Flexvolume
https://kubernetes.io/docs/concepts/storage/volumes/ https://github.com/kubernetes/community/blob/ma ...