poj1087 A Plug for UNIX (二)

2014-11-24 01:38:49 · 作者: · 浏览: 3
(i=1;i<=n;i++) if(strcmp(A,type[i])==0) break;
if(i>n) { n++;
strcpy(type[n],A);
} for(j=1;j<=n;j++)
if(strcmp(B,type[j])==0) break;
if(j>n) { n++;
strcpy(type[n],B); }
flow[j][i]=INF;//同一类型转换器数量无限制 } n++;
s=n;//源点 for(i=1;i<=tempn;i++)
flow[s][i]=1; } int bfs() {
int queue[MAXN],front,rear;
memset(level,0,sizeof(level));
front=rear=0; level[s]=1;
queue[rear++]=s;
while(front!=rear)
{ int v=queue[front++];
for(int i=0;i<=n;i++)
if(!level[i]&&flow[v][i]) {
level[i]=level[v]+1;
queue[rear++]=i; } }

return level[t]; } int dfs(int i,int f) {
if(i==t) return f;
int sum=0;
for(int j=0;f&&j<=n;j++)
{ if(level[j]==level[i]+1&&flow[i][j])
{ int tmp=dfs(j,min(f,flow[i][j]));
f-=tmp; flow[i][j]-=tmp;
flow[j][i]+=tmp;
sum+=tmp;
} } return sum; }
int dinic() { int maxflow=0;
while(bfs()) maxflow+=dfs(s,INF);
return maxflow; } int main() {
while(~scanf("%d",&n)) { build_graph();
printf("%d\n",m-dinic()); } return 0; }