zoukankan      html  css  js  c++  java
  • poj 1087 A Plug for UNIX

    #include<iostream>
    #include<map>
    #include<string>
    #include<queue>
    using namespace std;

    int nReceptacle,nDevice,nType,flag,res,node;
    int arr[600][600];
    int pre[600];
    int flow[600][600];
    map<string,int> PR;
    void Init()
    {
    int i,j;//u,v,w,
    char str1[25],str2[25];
    //freopen("a.txt","r",stdin);
    memset(arr,0,sizeof(arr));
    cin>>nReceptacle;
    //flag=0;
    //res=0;
    node=2;
    //输入Receptacle
    for(i=0;i<nReceptacle;++i)
    {
    cin>>str1;
    if(!PR[str1])
    PR[str1]=node++;
    arr[0][PR[str1]]++;
    }

    cin>>nDevice;
    for(i=0;i<nDevice;++i)
    {
    cin>>str1>>str2;
    if(!PR[str2])
    PR[str2]=node++;
    arr[PR[str2]][1]++;
    }

    cin>>nType;
    for(i=0;i<nType;++i)
    {
    cin>>str1>>str2;
    if(!PR[str1])
    PR[str1]=node++;
    if(!PR[str2])
    PR[str2]=node++;
    arr[PR[str2]][PR[str1]]=INT_MAX;
    }
    }

    int Edmods_Karp()
    {

    int d[1000];//d是增广路长度,pre记录前驱
    int i,j;

    memset(flow,0,sizeof(flow));
    while(true)
    {
    memset(pre,-1,sizeof(pre));
    d[0]=0x7fffffff;
    queue<int> que;
    que.push(0);
    while(!que.empty() && pre[1]<0)
    {
    int t=que.front();
    que.pop();
    for(i=0;i<node;++i)
    {
    if(pre[i]<0 && (j=arr[t][i]-flow[t][i]))
    {
    pre[i]=t;
    que.push(i);
    d[i]=min(d[t],j);
    }
    }

    }
    if(pre[1]<0) break;
    for(i=1;i!=0;i=pre[i])
    {
    flow[pre[i]][i]+=d[1];
    flow[i][pre[i]]-=d[1];
    }
    }
    for(j=i=0;i<node;j+=flow[0][i++]);
    return j;
    }
    int main()
    {
    Init();
    int t=Edmods_Karp();
    cout<<nDevice-t<<endl;
    return 0;
    }
  • 相关阅读:
    今天开始记录我所经历
    第一次作业
    OJ练习
    svn 有效代码统计
    关于TDD的思考
    BFS
    001 Phone Numbers
    使用statsvn统计svn中的代码量
    ContinueWhenAll 实现线程的多重依赖
    小组计划
  • 原文地址:https://www.cnblogs.com/redlight/p/2429613.html
Copyright © 2011-2022 走看看