题目大意:这个题意有些蛋疼,看了很大会才明白什么意思,有N个插座,这些插座都是有类型的只能给这种类型的电器充电,下面接着给了M种电器,和电器的插头类型,还有K种转换器,可以把一种类型转换成另一种,转换器也是可以串联使用的。

输入说明:
首先输入的是一个N,下面有N种插座,每种插座都有一个字符串代表,接着输入一个M,表示有M个电器需要充电,输入的每行有一个电器和它需要的插座类型,然后输入一个K,下面有K个转换器。
分析:这个英文写的这么长确实比较难理解,不过看懂题意后也是比较容易了,可以让电器给可以匹配的插座或者转换器连接,然后让转换器的给别的转换器或者插座连接,虚拟一个源点和所有的手机连接,在虚拟一个汇点让所有的插座与它相连,建图估计有些麻烦.
注意:转换器是无限提供的.......
*********************************************************************************************************************
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; const int MAXN = ;
const int oo = 1e9+; int G[MAXN][MAXN], layer[MAXN];
char s[MAXN][]; bool canLine(char s1[], char s2[])///判断转接口是否相同
{
    if(strcmp(s1, s2) == )
        return true;
    return false;
}
bool bfs(int start, int End)
{
    bool used[MAXN] = {};
    queue<int> Q; Q.push(start);
    memset(layer, -, sizeof(layer));
    layer[start] = , used[start] = true;     while(Q.size())
    {
        int u = Q.front();Q.pop();         if(u == End)return true;         for(int i=; i<=End; i++)
        {
            if(G[u][i] && used[i] == false)
            {
                used[i] = true;
                layer[i] = layer[u] + ;
                Q.push(i);
            }
        }
    }     return false;
}
int dfs(int u, int MaxFlow, int End)
{
    if(u == End)return MaxFlow;     int uFlow = ;     for(int i=; i<=End; i++)
    {
        if(G[u][i] && layer[i] == layer[u]+)
        {
            int flow = min(MaxFlow-uFlow, G[u][i]);
            flow = dfs(i, flow, End);             G[u][i] -= flow;
            G[i][u] += flow;             uFlow += flow;             if(uFlow == MaxFlow)
                break;
        }
    }     return uFlow;
}
int dinic(int start, int End)
{
    int MaxFlow = ;     while( bfs(start, End) == true )
        MaxFlow += dfs(start, oo, End);     return MaxFlow;
} int main()
{
    int N, M, K;     while(scanf("%d", &N) != EOF)
    {
        int i, j;         memset(G, , sizeof(G));         for(i=; i<=N; i++)///插头从1~N
            scanf("%s", s[i]);         scanf("%d", &M);
        for(i=; i<=M; i++)///手机从N~N+M,忽略手机名字
            scanf("%*s%s", s[i+N]);         scanf("%d", &K);
        ///Ki是转换头进入的开始点,Kj是转换头出去的开始点,start是源点,End是汇点
        int Ki = N+M, Kj = Ki+K, start = Kj+K+, End = start+;
        for(i=; i<=K; i++)///转换器的进入从N+M~N+M+K,转换器的出从N+M+K~N+M+2*K
        {///把入和出连接
            scanf("%s%s", s[Ki+i], s[Kj+i]);
            G[Ki+i][Kj+i] = oo;///转换器无限提供
        }         for(i=; i<=M; i++)
        {///建立手机和转换器,插座的关系
            for(j=; j<=N; j++)
            {///匹配一下手机和插座是否直接可以相连
                if( canLine(s[i+N], s[j]) == true)
                    G[i+N][j] = true;
            }
            for(j=; j<=K; j++)
            {///匹配一下手机和转换器入是否可以相连
                if( canLine(s[i+N], s[Ki+j]) == true)
                    G[i+N][Ki+j] = true;
            }
        }         for(i=; i<=K; i++)
        {///建立转换器与转换器或者插座的关系
            for(j=; j<=K; j++)
            {///匹配转换器出与转换器入,转换器无限提供,直接最大值
                if(i!=j && canLine(s[Kj+i], s[Ki+j]) == true)
                    G[Kj+i][Ki+j] = oo;
            }
            for(j=; j<=N; j++)
            {///匹配转换器出和插座的关系
                if(canLine(s[Kj+i], s[j]) == true)
                    G[Kj+i][j] = true;
            }
        }         for(i=; i<=M; i++)
        {///源点与手机的关系
            G[start][N+i] = true;
        }
        for(i=; i<=N; i++)
        {///插座与汇点的关系
            G[i][End] = true;
        }         printf("%d\n", M-dinic(start, End));
    }     return ;
}

C - A Plug for UNIX - poj 1087(最大流)的更多相关文章

  1. (网络流 模板)A Plug for UNIX -- poj -- 1087

    链接: http://poj.org/problem?id=1087 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#probl ...

  2. C - A Plug for UNIX POJ - 1087 网络流

    You are in charge of setting up the press room for the inaugural meeting of the United Nations Inter ...

  3. A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)

    题意: 几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量 这个题可以用二分图做 , 我用的是最 ...

  4. POJ 1087 最大流裸题 + map

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15597   Accepted: 5308 ...

  5. POJ 1087 A Plug for UNIX (网络流,最大流)

    题面 You are in charge of setting up the press room for the inaugural meeting of the United Nations In ...

  6. poj1087 A Plug for UNIX(网络流最大流)

    http://poj.org/problem?id=1087 好久没遇见过这么坑的题了这个题真是挫的够可以的.题目大意:你作为某高管去住宿了,然后宾馆里有几种插座,分别有其对应型号,你携带了几种用电器 ...

  7. poj 1087 最大流

    没啥好说的,慢慢建图 Sample Input 4 A B C D 5 laptop B phone C pager B clock B comb X 3 B X X A X D Sample Out ...

  8. POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)

    POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

  9. poj 1087 C - A Plug for UNIX 网络流最大流

    C - A Plug for UNIXTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contes ...

随机推荐

  1. CentOS7搭建SAMBA服务器实现与WIN10匿名共享文件

    1.安装SAMBA yum -y install samba samba-client samba-common 2.修改文件打开数 vi /etc/security/limits.conf 最后添加 ...

  2. input输入过滤js

    html部分使用方式 <input  onkeyup="usrNameSet(this)" /> 其它的自己可以随便调用 Js部分 //只能输入数字.字母.小数点.汉字 ...

  3. 对SQL Server SQL语句进行优化的10个原则

    1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大 ...

  4. 实现textarea限制输入字数

    实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个) textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框t ...

  5. HexColorPicker 让选色变得更简单[for Mac]

    开发iOS的筒子看过来,走过路过,一不小心就错过~ Xcode里的颜色选择器,不能让你随意制定十六进制的颜色,让选色变成了一种折磨,然而作为开发者和设计师又得经常要用到. 现在有了HexColorPi ...

  6. 可以让PHP编程事半功倍的类库

    在用php开发网站的时候,使用面向对象的方法确实可以提高代码复用率,减少代码冗余.而对初学者更友好的是,PHP开发网站所需要的大部分类库,网上都有十分优秀的类库存在了.作为一个程序猿当然不能重复制造轮 ...

  7. Java中的继承与组合

    本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...

  8. 获取fragment中对应的控件的写法

    getActivity().findViewById(id);//用来关联activity中加载的控件id

  9. Spring MVC PageNotFound.noHandlerFound No mapping found for HTTP request with URI

    首先骂人,干他娘的,弄了两个小时原来的包倒错了!!唉TMD. 注意用IDEA倒包的时候一定要注意ModelAndView是 原因是import出错了!!应该是import org.springfram ...

  10. PHP开发套件

    Windows系统下开发 环境配置: PHPstudy----立即下载 开发工具: PHPstorm----立即下载 引用一个注册服务器地址:潘田--phpstorm 2016.1注册码 当然推荐大家 ...