CF546E Soldier and Traveling(最大流)
来源:互联网 发布:怎么申请做淘宝客服 编辑:程序博客网 时间:2024/06/05 08:05
把每个点拆成两个点跑最大流即可。注意a的和可能和 b的和不相同!
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 300inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m,a[N],h[N],num=1,T=210,tot=0,tot0=0,lev[N],cur[N],ans=0;struct edge{ int to,next,val;}data[2000];inline void add(int x,int y,int val){ data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val; data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].val=0;}inline bool bfs(){ queue<int>q;memset(lev,0,sizeof(lev)); q.push(0);lev[0]=1; while(!q.empty()){ int x=q.front();q.pop(); for(int i=h[x];i;i=data[i].next){ int y=data[i].to;if(lev[y]||!data[i].val) continue; lev[y]=lev[x]+1;q.push(y); } }return lev[T];}inline int dinic(int x,int low){ if(x==T) return low;int tmp=low; for(int &i=cur[x];i;i=data[i].next){ int y=data[i].to;if(lev[y]!=lev[x]+1||!data[i].val) continue; int res=dinic(y,min(tmp,data[i].val)); if(!res) lev[y]=0;else tmp-=res,data[i].val-=res,data[i^1].val+=res; if(!tmp) return low; }return low-tmp;}int main(){// freopen("a.in","r",stdin); n=read();m=read(); for(int i=1;i<=n;++i){ int x=read();tot+=x;add(0,i,x);add(i,i+n,inf); }for(int i=1;i<=n;++i){ int x=read();tot0+=x;add(i+n,T,x); }if(tot!=tot0){puts("NO");return 0;} while(m--){ int x=read(),y=read(); add(x,n+y,inf);add(y,x+n,inf); }while(bfs()){memcpy(cur,h,sizeof(cur));ans+=dinic(0,inf);} if(ans!=tot){puts("NO");return 0;}puts("YES"); for(int x=1;x<=n;++x){ memset(a,0,sizeof(a)); for(int i=h[x];i;i=data[i].next){ int y=data[i].to-n;if(y==-n) continue; a[y]=data[i^1].val; }for(int i=1;i<n;++i) printf("%d ",a[i]); printf("%d\n",a[n]); }return 0;}
阅读全文
0 0
- CF546E Soldier and Traveling(最大流)
- E. Soldier and Traveling(CF546E) Codeforces Round #304 (Div. 2)
- E. Soldier and Traveling (CF 304 div2) 最大流
- Codeforces 546E - Soldier and Traveling (最大流)
- CF Soldier and Traveling(最大流SAP)拆点法
- Codeforces 546E Soldier and Traveling (最大流)
- Codeforces 546E Soldier and Traveling 最大流 C#实现
- CodeForces 546E - Soldier and Traveling(最大流+输出边流量)
- codeforces546E Soldier and Traveling
- Codeforces Round #304 (Div. 2) E - Soldier and Traveling 最大流 isap
- codeforces #304 E 546E E. Soldier and Traveling(最大流)
- Codeforces Round #304 (Div. 2) E. Soldier and Traveling 最大流 Dinic EK 算法
- Codeforces Round #304 (Div. 2) 546 E - Soldier and Traveling 最大流
- Codeforces Round #304 (Div. 2) E. Soldier and Traveling 复习一下最大流算法
- Codeforces 546 E Soldier and Traveling【最大流Dinic+判断残余网络】
- Codeforces 546E Soldier and Traveling (最大流+输出流量分配方案)
- Codeforces 546E - Soldier and Traveling (网络流输出流量)
- codeforces-546E. Soldier and Traveling(网络流)
- Git入门
- Excel导出工具-POI
- Java学习——集合框架
- 习题8.3
- OBJECT_ID 有哪些种类
- CF546E Soldier and Traveling(最大流)
- 《C++ Primer》读书笔记第十三章-3-对象移动
- phpAjax
- 戏说系列-从术和道来看基于流量的架构设计(下)
- 爬去去哪儿门票,并且可视化分析价格和销量的关系
- 扬帆起航的新一天
- 沉住气没错
- vs编译成功生成exe后运行时,提醒无法启动程序,计算机中丢失xx.dll解决办法
- Python正则表达式