POJ1087 A Plug for UNIX(网络流)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 16083 | Accepted: 5513 |
Description
Since the room was designed to accommodate reporters and journalists
from around the world, it is equipped with electrical receptacles to
suit the different shapes of plugs and voltages used by appliances in
all of the countries that existed when the room was built.
Unfortunately, the room was built many years ago when reporters used
very few electric and electronic devices and is equipped with only one
receptacle of each type. These days, like everyone else, reporters
require many such devices to do their jobs: laptops, cell phones, tape
recorders, pagers, coffee pots, microwave ovens, blow dryers, curling
irons, tooth brushes, etc. Naturally, many of these devices can
operate on batteries, but since the meeting is likely to be long and
tedious, you want to be able to plug in as many as you can.
Before the meeting begins, you gather up all the devices that the
reporters would like to use, and attempt to set them up. You notice that
some of the devices use plugs for which there is no receptacle. You
wonder if these devices are from countries that didn't exist when the
room was built. For some receptacles, there are several devices that use
the corresponding plug. For other receptacles, there are no devices
that use the corresponding plug.
In order to try to solve the problem you visit a nearby parts supply
store. The store sells adapters that allow one type of plug to be used
in a different type of outlet. Moreover, adapters are allowed to be
plugged into other adapters. The store does not have adapters for all
possible combinations of plugs and receptacles, but there is essentially
an unlimited supply of the ones they do have.
Input
input will consist of one case. The first line contains a single
positive integer n (1 <= n <= 100) indicating the number of
receptacles in the room. The next n lines list the receptacle types
found in the room. Each receptacle type consists of a string of at most
24 alphanumeric characters. The next line contains a single positive
integer m (1 <= m <= 100) indicating the number of devices you
would like to plug in. Each of the next m lines lists the name of a
device followed by the type of plug it uses (which is identical to the
type of receptacle it requires). A device name is a string of at most 24
alphanumeric
characters. No two devices will have exactly the same name. The plug
type is separated from the device name by a space. The next line
contains a single positive integer k (1 <= k <= 100) indicating
the number of different varieties of adapters that are available. Each
of the next k lines describes a variety of adapter, giving the type of
receptacle provided by the adapter, followed by a space, followed by the
type of plug.
Output
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 Output
1
【题意】有n个插座,m个电器,每个电器都对应一个插头,k个转换器,s1 s2表示插座s2可以转换成s1,
开始提供的插座只有一个插口,转换器有无数个,问最少有几个电器无法使用。
【分析】这就是个最大流问题,关键在于建图。定义一个超级源点,超级汇点,源点指向n个插座,电器
指向汇点,插座指向对应的电器,容量均为1,s2指向s1,容量为无穷大,Dinic求最大流。还有就是
这个题目数据范围有问题,定105RE,后看讨论改的805.
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x3f3f3f3f
#define mod 10000
typedef long long ll;
using namespace std;
const int N=;
const int M=;
int power(int a,int b,int c){int ans=;while(b){if(b%==){ans=(ans*a)%c;b--;}b/=;a=a*a%c;}return ans;}
struct man
{
int c,f;
}w[N][N];
int dis[N],n,m,k;
int s,ans,cnt;
int link;
map<string,int>p;
bool bfs()
{
queue<int>q;
memset(dis,,sizeof(dis));
q.push(s);
dis[s]=;
while(!q.empty()){
int v=q.front();q.pop();
for(int i=;i<=cnt;i++){
if(!dis[i]&&w[v][i].c>w[v][i].f){
q.push(i);
dis[i]=dis[v]+;
}
}
if(v==) return true;
}
return false;
}
int dfs(int cur,int cp)
{
if(cur==)return cp;
int tmp=cp,tt;
for(int i=;i<=cnt;i++){
if(dis[i]==dis[cur]+ && tmp &&w[cur][i].c>w[cur][i].f){
tt=dfs(i,min(w[cur][i].c-w[cur][i].f,tmp));
w[cur][i].f+=tt;
w[i][cur].f-=tt;
tmp-=tt;
}
}
return cp-tmp;
}
void dinic()
{
ans=;
while(bfs())ans+=dfs(s,inf);
}
int main(){ string str,_str;
while(~scanf("%d",&n)){
memset(w,,sizeof(w));
p.clear();
cnt=;
s=; while(n--){
cin>>str;
p[str]=++cnt;
w[][p[str]].c=;
}
cin>>m;
int M=m;
while(m--){
cin>>str>>_str;
p[str]=++cnt;
if(!p[_str])p[_str]=++cnt;
w[p[str]][].c=;
w[p[_str]][p[str]].c=;
}
cin>>k;
while(k--){
cin>>str>>_str;
if(!p[str])p[str]=++cnt;
if(!p[_str])p[_str]=++cnt;
w[p[_str]][p[str]].c=inf;
} dinic();
cout<<M-ans<<endl;
}
return ;
}
POJ1087 A Plug for UNIX(网络流)的更多相关文章
- POJ1087 A Plug for UNIX(网络流)
在会议开始之前,你收集所有记者想要使用的设备,并尝试设置它们.你注意到有些设备使用没有插座的插头.你想知道这些设备是否来自建造这个房间时并不存在的国家.对于一些插座,有几个设备使用相应的插头.对于其他 ...
- POJ1087 A Plug for UNIX —— 最大流
题目链接:https://vjudge.net/problem/POJ-1087 A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K T ...
- POJ1087:A Plug for UNIX(最大流)
A Plug for UNIX 题目链接:https://vjudge.net/problem/POJ-1087 Description: You are in charge of setting u ...
- 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 ...
- 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 ...
- UVA 753 - A Plug for UNIX(网络流)
A Plug for UNIX You are in charge of setting up the press room for the inaugural meeting of the U ...
- POJ1087 A Plug for UNIX 【最大流】
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13855 Accepted: 4635 ...
- UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)
解题报告 题意: n个插头m个设备k种转换器.求有多少设备无法插入. 思路: 定义源点和汇点,源点和设备相连,容量为1. 汇点和插头相连,容量也为1. 插头和设备相连,容量也为1. 可转换插头相连,容 ...
- POJ1087 A Plug for UNIX 2017-02-12 13:38 40人阅读 评论(0) 收藏
A Plug for UNIX Description You are in charge of setting up the press room for the inaugural meeting ...
随机推荐
- HDU 4085 斯坦纳树
题目大意: 给定无向图,让前k个点都能到达后k个点(保护地)中的一个,而且前k个点每个需要占据后k个中的一个,相互不冲突 找到实现这个条件达到的选择边的最小总权值 这里很容易看出,最后选到的边不保证整 ...
- K2任命新的亚太区高级副总裁
K2, 一个屡获殊荣的企业应用软件公司宣布,任命陈光明(Tan Kwang Meng, KM)为亚太区高级副总裁.这次任命是对公司持续发展的肯定,同时也是对将亚太区作为全球扩张战略的关键市场的承诺. ...
- Chrome 应用推荐 - 下载管理扩展: Chrono
地址:http://goo.gl/JVdxvg Chrono下载管理器让你轻松高效地管理Chrome浏览器中的下载任务.Chrono与Chrome浏览器紧密地整合在一起,如菜单.工具栏支持等等.Chr ...
- 分布式Nginx缓存清理(PHP的socket编程)
最近,公司要使用康乐的几台自建CDN换成Nginx,在缓存配置上不会有很多的问题,纠结的问题是:Nginx的如何批量进行缓存清理 我们都知道Nginx提供了一个第三方的模块"nginx ng ...
- JDBC体会
1.把mysql-connector XXXX版本导入buildpath 2.通过DriverManager 的getConnection 方法获得一个Connnection引用,方法的参数是 url ...
- C# 使用命令行编译单个CS文件
编译单个CS文件. 1.编译 File.cs 以产生 File.exe: csc File.cs 2.编译 File.cs 以产生 File.dll: ...
- 收藏的博客--PHP
32位Win7下安装与配置PHP环境(一至三) http://blog.csdn.net/yousuosi/article/details/9448903
- Oracle的DDL、DML、DCL
DDL (Data Definition Language 数据定义语言) create table 创建表 alter table 修改表 drop table 删除表 truncate table ...
- node.js 学习书籍推荐
今天向大家推荐一本node.js开发的书籍,本人刚刚看完. 建议:如果你是node.js小白,下边的介绍你可以看一下,如果不是请直接return. <Node.js开发指南>是一本带有开发 ...
- linux基础命令学习(一)
pwd 输出当前工作路径tree 以树状图列出目录的内容ctrl+c 取消命令的执行clear 清空屏幕ls 列出文件目录 蓝色是目录,白色是普通文件alias cls=clear 别名终端:本地终端 ...