bzoj1497: [NOI2006]最大获利
2017-07-25 20:03
267 查看
题目写着网络流,就网络流吧。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define inf 0x7f7f7f7f using namespace std; queue<int> q; int read() { char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') {f=(f<<1)+(f<<3)+ch-'0'; ch=getchar();} return f; } int n,m,head[60005],tot,sum,ans,dis[60005]; struct node { int from; int to; int next; int w; }edge[400005]; int s,t; bool bfs() { memset(dis,0,sizeof(dis)); dis[s]=1; q.push(s); while(!q.empty()) { int x=q.front(); q.pop(); for(int i=head[x];i!=-1;i=edge[i].next) { if(!dis[edge[i].to]&&edge[i].w) { dis[edge[i].to]=dis[x]+1; q.push(edge[i].to); } } } if(dis[t]) return 1; return 0; } int dfs(int x,int flow) { if(x==t||!flow) return flow; int ret=0; for(int i=head[x];i!=-1;i=edge[i].next) { if(dis[edge[i].to]==dis[x]+1) { int f=dfs(edge[i].to,min(flow,edge[i].w)); edge[i].w-=f;edge[i^1].w+=f; ret+=f;flow-=f; if(!flow) break; } } if(!ret) dis[x]=-1; return ret; } void dinic() { while(bfs()) { ans+=dfs(s,0x7f7f7f7f); } } void add(int u,int v,int w) { edge[tot].from=u; edge[tot].to=v; edge[tot].w=w; edge[tot].next=head[u]; head[u]=tot++; } int main() { memset(head,-1,sizeof(head)); n=read(),m=read(); s=0,t=m+n+1; for(int i=1;i<=n;i++) { int x=read(); add(s,i,x); add(i,s,0); } for(int i=1;i<=m;i++) { int x=read(),y=read(),z=read(); add(i+n,t,z); add(t,i+n,0); add(x,i+n,inf); add(i+n,x,0); add(y,i+n,inf); add(i+n,y,0); sum+=z; } dinic(); printf("%d",sum-ans); }
相关文章推荐
- BZOJ 1497 [NOI2006]最大获利 ——网络流
- bzoj 1497 [NOI2006]最大获利
- 【NOI2006】BZOJ1497最大获利
- BZOJ 1497 [NOI2006]最大获利
- bzoj1497[NOI2006]最大获利
- [最小割]BZOJ 1497——[NOI2006]最大获利
- BZOJ 1497: [NOI2006]最大获利
- 【Dinic】bzoj1497 noi2006 最大获利
- 【BZOJ】1497: [NOI2006]最大获利 最大权闭合子图或最小割
- AC日记——[NOI2006]最大获利 bzoj 1497
- BZOJ 1497: [NOI2006]最大获利( 最大流 )
- BZOJ 1497: [NOI2006]最大获利
- bzoj 1497: [NOI2006]最大获利 最小割
- 【BZOJ 1497】 [NOI2006]最大获利 最大权闭合子图
- BZOJ 1497 [NOI2006] 最大获利
- BZOJ 1497: [NOI2006]最大获利
- 【BZOJ 1497】 [NOI2006]最大获利
- BZOJ1497 NOI2006最大获利
- 【bzoj 1497】[NOI2006]最大获利
- BZOJ 1497 [NOI2006]最大获利