链接:

http://poj.org/problem?id=1087

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#problem/C

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#problem/J(密码:0817)

n个插座,m个电器及其对应的插座,k个转化器,前一个插座可以转化为后一个插座,问最少有多少设备没有插座用,转换器数量不限
最大流,源点向插座建边,容量为1,电器向汇点建边,容量为1,相应的插座和电器连边,容量为1,前一个插座转化为后一个插座,
后一个插座向前一个插座建边,容量为无穷大,求得的最大流即为最多配对的电器。

网络流的部分是会了, 可是如何建图还是要学习

代码:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm> using namespace std; #define N 1005
#define INF 0xfffffff int G[N][N], Layer[N];
char s[N][]; bool CanLine(char s1[], char s2[]) ///判断转接口是否相同
{
if(strcmp(s1, s2)==)
return true;
return false;
} bool BFS(int Start, int End)
{
queue<int>Q;
Q.push(Start); memset(Layer, -, sizeof(Layer));
Layer[Start] = ; while(Q.size())
{
int u = Q.front();
Q.pop(); if(u==End) return true; for(int i=; i<=End; i++)
{
if(Layer[i]==- && G[u][i])
{
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(G[u][i], MaxFlow-uflow);
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))
MaxFlow += DFS(Start, INF, 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] = INF; ///转换器无限提供
} for(i=; i<=m; i++) ///建立手机和转换器,插座的关系
{
for(j=; j<=n; j++) ///匹配一下手机和插座是否直接可以相连
if(CanLine(s[i+n], s[j]))
G[i+n][j]=true; for(j=; j<=k; j++) ///匹配一下手机和转换器入是否可以相连
if(CanLine(s[i+n], s[Ki+j]))
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]))
G[Kj+i][Ki+j] = INF; 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 ;
}

(网络流 模板)A Plug for UNIX -- poj -- 1087的更多相关文章

  1. 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 ...

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

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

  3. C - A Plug for UNIX - poj 1087(最大流)

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

  4. (网络流 模板 Edmonds-Karp)Drainage Ditches --POJ --1273

    链接: http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total ...

  5. 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 ...

  6. 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 ...

  7. poj 1087 A Plug for UNIX(字符串编号建图)

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

  8. Power Network POJ - 1459 [网络流模板]

    http://poj.org/problem?id=1459 嗯,网络流模板...多源点多汇点的图,超级汇点连发电厂,用户连接超级汇点 Status Accepted Time 391ms Memor ...

  9. uva753 A Plug for UNIX 网络流最大流

    C - A Plug for UNIX    You are in charge of setting up the press room for the inaugural meeting of t ...

随机推荐

  1. JQUERY框架的优点与面试题

    1 你觉得 jquery 有哪些好处?jQuery 是轻量级的 javascript 框架强大的选择器出色的 DOM 操作的封装可靠的事件处理机制完善的 ajax 封装出色的浏览器的兼容性支持链式操作 ...

  2. HTML5 画图--文字

    1:html <div style="margin:0 auto;width:794px;height:1123px"> <canvas id="myC ...

  3. Mysql update 一个表中自己的数据

    update  table ucf, table t2 set ucf.pcid = t2.pcid where t2.name = 'liming' and t2.gid= ucf.gid and ...

  4. webdriver自动化脚本

    1.需求如下: 启动火狐浏览器首先打开百度,等待3秒然后打开博客首页,等待2秒然后关闭浏览器 from selenium import webdriver from time import sleep ...

  5. (转) Ringbuffer为什么这么快?

    原文地址:http://ifeve.com/ringbuffer/ 最近,我们开源了LMAX Disruptor,它是我们的交易系统吞吐量快(LMAX是一个新型的交易平台,号称能够单线程每秒处理数百万 ...

  6. ubuntu连有线网 无法连接外网

    问题:连上网线后,有ip,但是无法访问外网. 我的解决方案是: .通过命令行ifconfig命令查看以太网(即网线插口)的名称,如下图,'enp3s0'是网线插口(Ethernet以太网): zhum ...

  7. 对实体类的CRUD操作

    --------------------siwuxie095 对实体类的 CRUD 操作 1.创建数据库和表 (1)创建一个 MySQL 连接:mybatis_conn (2)创建一个数据库:myba ...

  8. onsubmit return false仍提交表单

    博主之前遇到这样的问题,是因为代码有错,改正之后就正常了. 但今天确定代码没错,仍然return false提交表单. 总结网上各路大神的解释: 1.onsubmit的作用是防止form只有一个inp ...

  9. java程序员从ThinkPad到Mac的使用习惯改变

    https://blog.csdn.net/yczz/article/details/49993417

  10. [leetcode]333. Largest BST Subtree最大二叉搜索树子树

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...