只有第5点过不了,求助

P1402 酒店之王

您的建边错了 应该是S->P->P->T 两次人,中间联为1的边 建图如下 ···cpp ```cpp main() { int q,p,room[N][N],dish[N][N]; scanf("%d%d%d",&n,&p,&q); memset(e,-1,sizeof e); memset(st,-1,sizeof st); for (int i=1;i<=n;i++) for (int j=1;j<=p;j++) scanf("%d",&room[i][j]); for (int i=1;i<=n;i++) for (int j=1;j<=q;j++) scanf("%d",&dish[i][j]); int S=0,T=2*n+p+q; for (int i=1;i<=p;i++) add_edge(S,i,1); //S to room for (int i=1;i<=n;i++) add_edge(p+i,p+i+n,1); //people1 to people2 for (int i=1;i<=n;i++) for (int j=1;j<=p;j++) if (room[i][j]) add_edge(j,p+i,1); //room to people1 for (int i=1;i<=n;i++) for (int j=1;j<=q;j++) if (dish[i][j]) add_edge(p+n+i,p+2*n+j,1); //people2 to dish for (int i=1;i<=q;i++) add_edge(p+2*n+i,T,1); //dish to T printf("%d\n",Dinic(S,T)); } ··· ```
by 远航之曲 @ 2017-02-19 18:16:53


|