1877: [SDOI2009]晨跑 费用流
2016-01-22 16:09
375 查看
拆点费用流。。
#include<iostream> #include<cstdio> #include<cstring> #define M 405 #define inf 1000000007 using namespace std; int n,m,T,cnt=1,ans1,ans2; int head[405],dis[405],q[405],path[405]; bool vis[405]; int list[50005],next[50005],from[50005],flow[50005],cost[50005]; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } inline void insert(int x,int y,int z,int w) { next[++cnt]=head[x]; head[x]=cnt; from[cnt]=x; list[cnt]=y; flow[cnt]=z; cost[cnt]=w; } inline bool spfa() { for (int i=1;i<=T;i++) dis[i]=inf; dis[1]=0; q[1]=1; vis[1]=1; int t=0,w=1,x; while (t!=w) { t=(t+1)%M; x=q[t]; for (int i=head[x];i;i=next[i]) if (flow[i]&&dis[list[i]]>dis[x]+cost[i]) { dis[list[i]]=dis[x]+cost[i]; path[list[i]]=i; if (!vis[list[i]]) { vis[list[i]]=1; w=(w+1)%M; q[w]=list[i]; } } vis[x]=0; } return dis[T]!=inf; } inline void mcf() { int x=inf; for (int i=path[T];i;i=path[from[i]]) x=min(x,flow[i]); for (int i=path[T];i;i=path[from[i]]) ans2+=x*cost[i],flow[i]-=x,flow[i^1]+=x; ans1+=x; } int main() { n=read(); m=read(); T=2*n; for (int i=1;i<=m;i++) { int u=read(),v=read(),w=read(); insert(u+n,v,1,w); insert(v,u+n,0,-w); } insert(1,n+1,inf,0); insert(n+1,1,0,0); insert(n,n+n,inf,0); insert(n+n,n,0,0); for (int i=2;i<n;i++) insert(i,i+n,1,0),insert(i+n,i,0,0); while (spfa()) mcf(); cout << ans1 << " " << ans2 << endl; return 0; }
相关文章推荐
- [IOS]二维曲线图表
- WINDOWS API——OPENCLIPBOARD——剪切板
- WKWebView 加载Html
- PPT扁平化风格设计手册
- Android mtk6572 Camera 录制更大视频文件的修改
- seaJs原理分析和源码解读(上)
- 程序员常用Photoshop工具教程 (格式转换,裁剪)
- Usb Audio Device Descriptor(3) Input Terminal Descriptor
- 监控InfoPackage从ECC抽数的记录
- asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- OpenCV基础篇之画图及RNG随机数对象
- pg中replace和translate的用法(数据少的中文排序)
- 关于 explicit 的一些学习
- linux常用命令—— 网络通信(十)
- 进制控制原语
- 做网站上线
- Linux workqueue工作原理
- FUSE 简介
- 关闭编辑easyui datagrid table
- FPGA内部动态可重置PLL讲解(二)