codeforces gym 100357 I (费用流)
2017-05-01 00:03
232 查看
题目大意
View Code
#include <bits/stdc++.h> using namespace std; #define rep(i,x,y) for (int i=x;i<=y;i++) const int N=1000; const int INF=2000000000; int n,m,S,T,sum,minC,maxF; int lt[N*4],flag ,dis[N*4],pd[N*4],pre[N*4],sgn[N*4]; vector <int> vec ; struct edge{ int u,v,f,w,nt; }eg[N*6]; void add(int u,int v,int f,int w) { //cout<<u<<" "<<v<<" "<<f<<" "<<w<<endl; eg[++sum]=(edge){u,v,f,w,lt[u]}; lt[u]=sum; eg[++sum]=(edge){v,u,0,-w,lt[v]}; lt[v]=sum; } bool spfa() { queue <int> Q; rep (i,S,T) dis[i]=INF,pd[i]=0,pre[i]=-1; dis[S]=0; pd[S]=1; Q.push(S); while (!Q.empty()) { int u=Q.front(); for (int i=lt[u];i;i=eg[i].nt) { int v=eg[i].v; if (eg[i].f>0) { if (dis[u]+eg[i].w<dis[v]) { dis[v]=dis[u]+eg[i].w; pre[v]=i; if (!pd[v]) { Q.push(v); pd[v]=1; } } } } pd[u]=0; Q.pop(); } return dis[T]!=INF; } void minCmaxF() { int flow; while (spfa()) { flow=INF; for (int i=pre[T];~i;i=pre[eg[i].u]) flow=min(flow,eg[i].f); for (int i=pre[T];~i;i=pre[eg[i].u]) eg[i].f-=flow,eg[i^1].f+=flow; maxF+=flow; minC+=flow*dis[T]; } } int main() { freopen("sat.in","r",stdin); freopen("sat.out","w",stdout); cin.sync_with_stdio(0); sum=1; memset(lt,0,sizeof(lt)); int limit=0; cin>>n>>m; S=0; T=3*n+m+1; rep(i,1,m) { int num; cin>>num; rep(j,1,num) { int x; cin>>x; flag[abs(x)]++; if (x>0) sgn[x]=1; else sgn[x]=-1; vec[i].push_back(x); } } rep(i,1,n) if (flag[i]==2) add(S,i,1,-1),limit++; else add(S,i,1,0); rep(i,1,n) {add(i,n+2*i-1,1,0); add(i,n+2*i,1,0);} rep(i,1,m) { for (auto v:vec[i]) { int x=v>0?n+2*abs(v)-1:n+2*abs(v); add(x,n*3+i,1,0); } add(3*n+i,T,1,0); } minC=maxF=0; minCmaxF(); vector <int> ans; if (minC==-limit && maxF==m) { cout<<"YES"<<endl; for (int i=lt[S];i;i=eg[i].nt) { if (eg[i].f==1) { if (sgn[eg[i].v]==1) ans.push_back(0); else ans.push_back(1); } else { if (eg[lt[eg[i].v]].f==0) ans.push_back(0); else ans.push_back(1); } } for (int i=ans.size()-1;i>=0;i--) cout<<ans[i]<<" "; cout<<endl; } else cout<<"NO"<<endl; }
View Code
相关文章推荐
- [费用流建模] Codeforces Gym 101190 NEERC 16 D. Delight for a Cat
- [树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
- Codeforces Gym 101190 NEERC 16 .D Delight for a Cat (上下界的费用流)
- codeforces gym 100357 J (网络流)
- codeforces gym 100357 K (表达式 模拟)
- Codeforces Gym 100002 E "Evacuation Plan" 费用流
- codeforces gym 100357 H (DP 高精度)
- 【宽搜】ECNA 2015 E Squawk Virus (Codeforces GYM 100825)
- codeforces gym 101164 K Cutting 字符串hash
- Codeforces Gym 100792C Colder-Hotter
- 【Codeforces Gym 100187F 】+ 贪心
- Codeforces Gym 100814 G It is all about wisdom 二分+最短路
- Codeforces GYM 100548 F - Color 2014-2015 ACM-ICPC, Asia Xian Regional Contest
- CodeForcesGym 100753K Upside down primes
- Codeforces Gym 100623C Problem C. Class
- [分治 杂题] Codeforces Gym 101173 CERC 16 G & BZOJ 4792 Geohash Grid
- Codeforces Gym 100096A Athletic competition 树型DP
- codeforces GYM 100792H
- [构造 随机乱搞] Codeforces Gym 100608 ASC 47 E. Elegant Square
- Codeforces Gym 100796E Permutation Polygon(线段树)