标签:
【题目大意】
/*还是TLE,回头看*/ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define S 0 #define T MAXN-1 using namespace std; const int INF=0x7fffffff; const int MAXN=3000+50; const int MAXM=4004000+50; struct node { int fr,to,pos,cap; }; int n,m,sum; int dis[MAXN]; int vis[MAXN]; int cur[MAXN]; int first[MAXN],next[MAXM]; node edge[MAXM]; int tot=0; int read() { int x = 0; char ch = getchar(); while (ch < ‘0‘ || ‘9‘ < ch) ch = getchar(); while (‘0‘ <= ch && ch <= ‘9‘) { x = x * 10 + ch - ‘0‘; ch = getchar(); } return x; } void addedge(int u,int v,int c) { edge[++tot]=(node){u,v,tot+1,c}; next[tot]=first[u];first[u]=tot; edge[++tot]=(node){u,v,tot-1,0}; next[tot]=first[v];first[v]=tot; } void build() { memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); int ai,bi; n=read(); for (int i=1;i<=n;i++) { ai=read(); sum+=ai; addedge(S,i,ai); } for (int i=1;i<=n;i++) { bi=read(); sum+=bi; addedge(i,T,bi); } m=read(); int k,c1i,c2i; for (int i=1;i<=m;i++) { k=read();c1i=read();c2i=read(); int u=n+i; int v=n+i+m; addedge(S,u,c1i); addedge(v,T,c2i); sum+=c1i+c2i; for (int j=1;j<=k;j++) { int ci; ci=read(); addedge(u,ci,INF); addedge(ci,v,INF); } } } int bfs() { memset(dis,-1,sizeof(dis)); int l=0,r=0; int que[MAXN]; que[++r]=S; dis[S]=0; while (l<r) { int head=que[l];l++; for (int i=first[head];i!=-1;i=next[i]) { node &tmp=edge[i]; if (dis[tmp.to]==-1 && tmp.cap>0) { dis[tmp.to]=dis[head]+1; que[++r]=tmp.to; } } } return (dis[T]!=-1); } int dfs(int s,int t,int f) { vis[s]=1; if (s==t || !f) return f; int res=0; for (int i=first[s];i!=-1;i=next[i]) { node &tmp=edge[i]; if (!vis[tmp.to] && tmp.cap>0 && dis[tmp.to]==dis[s]+1) { int delta=dfs(tmp.to,t,min(tmp.cap,f)); if (delta>0) { tmp.cap-=delta; edge[tmp.pos].cap+=delta; f-=delta; res+=delta; if (!f) return res; } } } return res; } int dinic() { int flow=0; while (bfs()) { memset(vis,0,sizeof(vis)); flow+=dfs(S,T,INF); } return flow; } int main() { build(); printf("%d\n",sum-dinic()); return 0; }
【最大权闭合子图/最小割】BZOJ3438-小M的作物【待填】
标签:
原文地址:http://www.cnblogs.com/iiyiyi/p/5640104.html