记录编号 149089 评测结果 AAAAAAAAAA
题目名称 [网络流24题] 太空飞行计划 最终得分 100
用户昵称 Gravatarnew ioer 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2015-02-18 16:46:23 内存使用 0.58 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
const int inf=0x3f3f3f3f;
int n,m,en,ans,len=1,g[205],d[205],q[205],p[205];
int to[25000],cap[25000],next[25000];
void add(int x,int y,int z){
	to[++len]=y,next[len]=g[x],cap[len]=z,g[x]=len;
	to[++len]=x,next[len]=g[y],cap[len]=0,g[y]=len;
}
bool bfs(){
	int l=1,r=1;
	memset(d,0,sizeof d),d[0]=1,q[1]=0;
	while(l<=r){
		int x=q[l++];
		for(int i=g[x];i;i=next[i])
			if(!d[to[i]]&&cap[i]) 
				q[++r]=to[i],d[to[i]]=d[x]+1; 
	}
	return d[en];
}
int dfs(int x,int y){
	if(x==en||!y) return y;int flow=0;
	for(int &i=p[x];i;i=next[i]){
		if(!cap[i]||d[to[i]]!=d[x]+1) continue;
		int f=dfs(to[i],std::min(y,cap[i]));
		flow+=f,y-=f,cap[i]-=f,cap[i^1]+=f;
		if(!y) break;
	}
	return flow;
}
int main(){
	freopen("shuttle.in","r",stdin);
	freopen("shuttle.out","w",stdout);
	scanf("%d%d",&n,&m),en=n+m+1;
	for(int x,y,i=1;i<=n;i++){
		scanf("%d",&x),ans+=x,add(0,i,x);
		while(scanf("%d%c",&x,&y)){
			add(i,x+n,inf);
			if(y=='\r') break;
		}
	}
	for(int x,i=1;i<=m;i++) scanf("%d",&x),add(i+n,en,x);
	while(bfs()){
		memcpy(p,g,sizeof p);
		ans-=dfs(0,inf);
	}
	for(int i=1;i<=n;i++)
		if(d[i]) printf("%d ",i);
	putchar('\n');
	for(int i=1;i<=m;i++)
		if(d[i+n]) printf("%d ",i);
	printf("\n%d",ans);
}