bzoj1163 [Baltic2008]Mafia

网友投稿 699 2022-08-29

bzoj1163 [Baltic2008]Mafia

bzoj1163 [Baltic2008]Mafia

​​ Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 Input 第一行输入N,M代表车站的总个数,及有多少条双向边连接它们. 2<=n<=200 , 1 <=m<=20000. 第二行给出两个数a,b,代表匪徒的出发点及目标点.1<=a,b<=N,a<>b. 再下来有N行,给出对第i个车站进行布控所需要的Money,其不超过10 000 000 再下来M行,用于描述图的结构. Output 最少需要多少Money Sample Input 5 6 5 3 2 4 8 3 10 1 5 1 2 2 4 4 5 2 3 3 4 Sample Output 5

题意:求分隔两个点的最小代价 所以就拆点 中间限制下流量 原来的边 给改成inf边 拆开的两个点之间给自己的权值即可 跑最小割

#include#include#include#include#define M 110000#define inf 0x3f3f3f3f#define N 440using namespace std;inline char gc(){ static char now[1<<16],*S,*T; if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;} return *S++;}inline int read(){ int x=0;char ch=gc(); while(ch<'0'||ch>'9') ch=gc(); while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();return x;}struct node{ int y,z,next;}data[200000];int h[N],cur[N],level[N],n,m,s,t,T,num=1;inline void insert1(int x,int y,int z){ data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num; data[++num].y=x;data[num].z=0;data[num].next=h[y];h[y]=num;}inline bool bfs(){ memset(level,0,sizeof(level));level[s]=1;queueq;q.push(s); while(!q.empty()){ int x=q.front();q.pop(); for (int i=h[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if(level[y]||!z) continue;q.push(y);level[y]=level[x]+1;if (y==T) return 1; } }return 0;}inline int dfs(int x,int s){ if (x==T) return s;int ss=s; for (int &i=cur[x];i;i=data[i].next){ int y=data[i].y,z=data[i].z; if (level[x]+1==level[y]&&z){ int xx=dfs(y,min(z,s));if (!xx) level[y]=0; s-=xx;data[i].z-=xx;data[i^1].z+=xx;if (!s) return ss; } }return ss-s;}int main(){ //freopen("bzoj1163.in","r",stdin); n=read();m=read(); s=read();t=read(); for (int i=1;i<=n;++i) insert1(i,i+n,read()); for (int i=1;i<=m;++i){ int x=read(),y=read();insert1(x+n,y,inf);insert1(y+n,x,inf); }T=n+t;int ans=0; while(bfs()) memcpy(cur,h,sizeof(cur)),ans+=dfs(s,inf);printf("%d",ans); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:hdu4441 Queue Sequence
下一篇:MySQL的join buffer原理及如何提高查询效率
相关文章

 发表评论

暂时没有评论,来抢沙发吧~