【BZOJ】【1391】【CEOI2008】order
2015-03-14 22:43
429 查看
网络流/最小割
暴力建图就好了……S->i 容量为收益,i->j+n 容量为租金,j+n->T容量为购买所花的钱。如果亏钱的话那么割掉的就是收益,表示不赚钱。
如果租金大于购买所花的钱就会割掉购买的钱(因为流量限制住了……)
表示T到死啊……copy了Hzwer……orz
//BZOJ 2768 #include<vector> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define rep(i,n) for(int i=0;i<n;++i) #define F(i,j,n) for(int i=j;i<=n;++i) #define D(i,j,n) for(int i=j;i>=n;--i) #define pb push_back using namespace std; inline int getint(){ int v=0,sign=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();} while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();} return v*sign; } const int N=2510,M=3000000,INF=~0u>>2; typedef long long LL; /******************tamplate*********************/ int n,m,ans; struct edge{ int to,v; }; edge E[M]; int head ,next[M],cnt; void add(int x,int y,int v){ E[++cnt]=(edge){y,v}; next[cnt]=head[x]; head[x]=cnt; E[++cnt]=(edge){x,0}; next[cnt]=head[y]; head[y]=cnt; } int s,t,cur ,d ,Q ; void init(){ n=getint();m=getint(); cnt=1;ans=0; s=0; t=n+m+1; int x,y,a,b; F(i,1,n){ x=getint(); y=getint(); ans+=x; add(s,i,x); F(j,1,y){ a=getint(); b=getint(); add(i,n+a,b); } } F(i,1,m){ x=getint(); add(n+i,t,x); } } bool mklevel(){ F(i,s,t) d[i]=-1; d[s]=0; int l=0,r=-1; Q[++r]=s; while(l<=r){ int x=Q[l++]; for(int i=head[x];i;i=next[i]) if (d[E[i].to]==-1 && E[i].v){ d[E[i].to]=d[x]+1; Q[++r]=E[i].to; } } return d[t]!=-1; } int dfs(int x,int a){ if (x==t||a==0) return a; int flow=0; for(int &i=cur[x];i && flow<a;i=next[i]) if (d[E[i].to]==d[x]+1 && E[i].v){ int f=dfs(E[i].to,min(a-flow,E[i].v)); E[i].v-=f; E[i^1].v+=f; flow+=f; } if (!flow) d[x]=-1; return flow; } void Dinic(){ while(mklevel()){ F(i,s,t) cur[i]=head[i]; ans-=dfs(s,INF); } } int main(){ #ifndef ONLINE_JUDGE freopen("2768.in","r",stdin); freopen("2768.out","w",stdout); #endif init();Dinic(); printf("%d\n",ans); return 0; }
View Code(My)
1391: [Ceoi2008]order
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 746 Solved: 230
[Submit][Status][Discuss]
Description
有N个工作,M种机器,每种机器你可以租或者买过来.每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。
现在给出这些参数,求最大利润
Input
第一行给出 N,M(1<=N<=1200,1<=M<=1200)下面将有N块数据,每块数据第一行给出完成这个任务能赚到的钱(其在[1,5000])及有多少道工序
接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[1,20000])
最后M行,每行给出购买机器的费用(其在[1,20000])
Output
最大利润Sample Input
2 3100 2
1 30
2 20
100 2
1 40
3 80
50
80
110
Sample Output
50HINT
Source
[Submit][Status][Discuss]相关文章推荐
- 【bzoj1391】【Ceoi2008】【Order】【最小割】
- BZOJ 1391 [Ceoi2008]order(最小割)
- BZOJ1391 [Ceoi2008]order 最小割
- BZOJ_1391_[Ceoi2008]order_最大权闭合子图
- bzoj 1391 [Ceoi2008]order(最小割)
- [BZOJ1391][Ceoi2008]order(最小割)
- bzoj1391 [Ceoi2008]order
- 【BZOJ 1391】[Ceoi2008]order 最小割
- BZOJ1391 [Ceoi2008]order
- [CEOI2008] BZOJ 1391 order-最小割
- BZOJ1391: [Ceoi2008]order
- BZOJ1391: [Ceoi2008]order 最大权闭合子图
- 【bzoj1391】[Ceoi2008]order 网络流最小割
- 【CEOI2008】bzoj1391 order
- [BZOJ1391]-[Ceoi2008]order-最小割
- bzoj1391 [Ceoi2008]order 网络流——最大权闭合子图
- BZOJ 1391: [Ceoi2008]order [最小割]
- 【bzoj1391】[Ceoi2008]order
- BZOJ 1391 [Ceoi2008]order
- BZOJ 1391|CEOI 2008|Order|最小割