传送门

费用流水题。


依然是照着题意模拟建边就行了。

为了练板子又重新写了一遍费用流。

代码:

#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 题」分配问题(费用流)的更多相关文章

  1. 2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)

    传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1​和i2i_2i2​,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1​),(i2​, ...

  2. 2018.10.14 loj#6011. 「网络流 24 题」运输问题(费用流)

    传送门 费用流入门题. 直接按照题意模拟. 把货物的数量当做容量建边. 然后跑一次最小费用流和最大费用流就行了. 代码: #include<bits/stdc++.h> #define N ...

  3. 【刷题】LOJ 6012 「网络流 24 题」分配问题

    题目描述 有 \(n\) 件工作要分配给 \(n\) 个人做.第 \(i\) 个人做第 \(j\) 件工作产生的效益为 \(c_{ij}\) ​​.试设计一个将 \(n\) 件工作分配给 \(n\) ...

  4. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  5. 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)

    传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...

  6. Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)

    Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...

  7. 【LOJ】 #6012. 「网络流 24 题」分配问题

    题解 又写了一遍KM算法,这题刚好是把最大最小KM拼在一起写的,感觉比较有记录价值 感觉KM始终不熟啊QAQ 算法流程大抵如下,原理就是每次我们通过减少最少的匹配量达成最大匹配,所以获得的一定是最大价 ...

  8. 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题

    题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...

  9. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

随机推荐

  1. HTML5 Canvas ( 画一个五角星 ) lineJoin miterLimit

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. c++builder 代码模板 code templates

    c++builder6.0  MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Prog ...

  3. python中关键字的总结

    python中各种关键字的总结:用表格形式,解释关键字符号的作用和案例说明                    关键字                                         ...

  4. jQuery中的几个模块总结

    Query插件,以备并希望在前端方面有所长进.请批评指正. 一,类型判断全解 JQuery判断类型扩展方法:$.type() /*type: function( obj ) { if ( obj == ...

  5. 一文看懂Stacking!(含Python代码)

    一文看懂Stacking!(含Python代码) https://mp.weixin.qq.com/s/faQNTGgBZdZyyZscdhjwUQ

  6. 视图的URL配置,找不到我设置的第一个Page

    问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page   原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下 ...

  7. hdoj3038(带权并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题意:对于给定的a1..an,通过询问下标x..y,给出a[x]+...+a[y],但给出的值可 ...

  8. IIS7web服务器调试ASP.net程序遇到的一些故障的解决办法

    1. [由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] 故障描述:[由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] ...

  9. VMware克隆CentOS网络配置

    配置网络 如果是克隆CentOS的: vi /etc/udev/rules.d/70-persistent-net.rules 注释掉网络eth0,把最后一个改为eth0,记录下mac地址. vi / ...

  10. httplib:AttributeError: 'module' object has no attribute 'HTTPConnection'

    # -*-coding:gb2312-*- #Function:学习python的httplib模块 import httplib conn = httplib.HTTPConnection(&quo ...