zoukankan      html  css  js  c++  java
  • Uva11045

    题意:有6种类型的志愿服,给你n件衣服(n一定是6的倍数),然后m个志愿者,接下里有m行,有两个字符串,表示志愿者能穿的衣服的尺码,问你是否所有志愿者都能找到合适的衣服= =

    最大流:0为源点,m+7为汇点,源点到每种志愿服的容量是n/6,志愿服和志愿者之间的容量是1,志愿者和汇点之间的容量是1,然后其余源点到汇点的最大流F,若F==m则输出YES,否则就是NO..

    #include<stdio.h>
    #include<string.h> 
    #include<algorithm>
    #include<iostream>
    #include<string> 
    #include<vector>
    #include<queue>
    const int inf=89999999;
    using namespace std;
    const int N=100;
    string g[10]={"","XXL","XL","L","M","S","XS"};
    int G[100][100];
    int a[100];
    int flow[100][100];
    int p[100];
    int n,m,F,V;
    void EK_()
    {
        queue<int>q;
        memset(flow,0,sizeof(flow));
        for(;;)
        {
            memset(a,0,sizeof(a)); 
            a[0]=inf; 
            q.push(0);
            while(!q.empty())
            {
                int u=q.front();
                q.pop();
                for(int v=0;v<=V;v++)
                { 
                if(!a[v]&&G[u][v]>flow[u][v])
                {
                p[v]=u;
                q.push(v);
                a[v]=a[u];
                if(a[v]>G[u][v]-flow[u][v])
                a[v]=G[u][v]-flow[u][v];
                }
            } 
            }    
            if(a[V]==0)
            break;
            for(int u=V;u!=0;u=p[u])
            {
                flow[p[u]][u]+=a[V];
                flow[u][p[u]]-=a[V];
            }
            F+=a[V];
        }
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
        memset(G,0,sizeof(G));
        scanf("%d%d",&n,&m);
        V=m+7;
        string s1,s2;
        for(int i=1;i<=6;i++)
        G[0][i]=n/6;
        for(int i=1;i<=m;i++)
        {
            cin>>s1>>s2;
            int a1,a2;
            for(a1=1;g[a1]!=s1;a1++);
            for(a2=1;g[a2]!=s2;a2++);
            G[a1][i+6]=1;
            G[a2][i+6]=1;
            G[i+6][V]=1;
        }
        F=0;
        EK_();
        if(F==m)
        cout<<"YES
    ";
        else
        cout<<"NO
    ";
    }
    return 0;
    }
  • 相关阅读:
    如何开始学习编程? 这 3 步很重要
    php正则表达式验证手机/固定电话/邮箱/身份证/银行卡自定义函数
    【经验分享】-PHP程序员的技能图谱
    PHP程序员的技能图谱
    PHP程序员要掌握的技能
    冒泡排序
    文件下载方法
    加密,解密方法
    获取真实IP
    二维数组根据某个字段排序
  • 原文地址:https://www.cnblogs.com/NaCl/p/4914319.html
Copyright © 2011-2022 走看看