[拆边费用流] BZOJ 1449 [JSOI2009]球队收益
来源:互联网 发布:java 退出程序 编辑:程序博客网 时间:2024/05/19 19:12
比较巧妙的是假设双方都输 然后输变赢增加的收益是多少
跑费用流就好了
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;inline char nc(){static char buf[100000],*p1=buf,*p2=buf;if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }return *p1++;}inline void read(int &x){char c=nc(),b=1;for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int M=100005,N=10005;struct edge{int u,v,f,w; int next;};edge G[M];int head[N],inum=1;inline void add(int u,int v,int f,int w,int p){G[p].u=u; G[p].v=v; G[p].f=f; G[p].w=w; G[p].next=head[u]; head[u]=p;}inline void link(int u,int v,int f,int w){add(u,v,f,w,++inum); add(v,u,0,-w,++inum);}const int NQ=N;int n,m,ans;int win[N],lose[N],a[N],b[N],c[N],d[N];int S,T,Mincost;int ins[N];int Q[NQ],l,r;int dis[N],pre[N];#define V G[p].vinline bool SPFA() { int u; for (int i=1;i<=T;i++) dis[i]=1<<30,pre[i]=0,ins[i]=0; memset(Q,0,sizeof(Q)); l=r=-1; Q[(++r)%NQ]=S; dis[S]=0; ins[S]=1; while (l!=r) { u=Q[(++l)%NQ]; ins[u]=0; for (int p=head[u];p;p=G[p].next) if (G[p].f && dis[V]>dis[u]+G[p].w) { dis[V]=dis[u]+G[p].w; pre[V]=p; if (!ins[V]) Q[(++r)%NQ]=V,ins[V]=1; } } if (dis[T]==1<<30) return false; int minimum=1<<30; for (int p=pre[T];p;p=pre[G[p].u]) minimum=min(minimum,G[p].f); for (int p=pre[T];p;p=pre[G[p].u]) { G[p].f-=minimum; G[p^1].f+=minimum; Mincost+=G[p].w*minimum; } return true; } int main(){int tmp;freopen("t.in","r",stdin);freopen("t.out","w",stdout);read(n); read(m); S=n+m+1; T=S+1;for (int i=1;i<=n;i++)read(win[i]),read(lose[i]),read(c[i]),read(d[i]); for (int i=1;i<=m;i++)read(a[i]),read(b[i]),lose[a[i]]++,lose[b[i]]++; for (int i=1;i<=n;i++) ans+=c[i]*win[i]*win[i]+d[i]*lose[i]*lose[i]; for (int i=1;i<=m;i++) { link(S,i,1,0);link(i,a[i]+m,1,0);link(i,b[i]+m,1,0); tmp=c[a[i]]*(2*win[a[i]]+1)-d[a[i]]*(2*lose[a[i]]-1); link(a[i]+m,T,1,tmp);win[a[i]]++; lose[a[i]]--; tmp=c[b[i]]*(2*win[b[i]]+1)-d[b[i]]*(2*lose[b[i]]-1); link(b[i]+m,T,1,tmp); win[b[i]]++; lose[b[i]]--; } while (SPFA());ans+=Mincost;printf("%d\n",ans);}
0 0
- [拆边费用流] BZOJ 1449 [JSOI2009]球队收益
- BZOJ 1449: [JSOI2009]球队收益 拆边费用流
- BZOJ 1449 JSOI2009 球队收益 费用流
- bzoj 1449: [JSOI2009]球队收益 (费用流)
- bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)
- 【bzoj1449/2895】 JSOI2009球队收益 费用流
- 【bzoj1449】【JSOI2009】【球队收益】【费用流】
- BZOJ 1449/2895: [JSOI2009]球队收益|网络流
- 1449: [JSOI2009]球队收益
- BZOJ 1449: [JSOI2009]球队收益 此坑必填 先去打cf
- bzoj1449【JSOI2009】球队收益
- 【JSOI2009】bzoj1449 球队收益
- bzoj1449: [JSOI2009]球队收益
- [JSOI2009]球队收益
- BZOJ1449: [JSOI2009]球队收益
- 【BZOJ1449】[JSOI2009]球队收益【最小费用最大流】【单调增函数建图】
- bzoj1149/2895 [JSOI2009]球队收益
- bzoj1449/2895[JSOI2009]球队收益
- TP框架之多文件上传
- linux基础学习笔记-7-ssh服务,NFS服务,tftp服务
- 详解移位运算符-二进制中1的个数
- 1016
- [暴搜剪枝] BZOJ 3733 [Pa2013]Iloczyn
- [拆边费用流] BZOJ 1449 [JSOI2009]球队收益
- 矢量字体字形分布图
- 1012. The Best Rank (25)
- activeMQ消息中文乱码解决
- poj2891(中国剩余定理模版::不要求模数互质)
- Lintcode_28 Search a 2D Matrix
- Android studio 创建aidl文件夹
- iOS面试之runtime
- 初识hadoop框架及hadoop1.x 与hadoop2.x的区别