A Plug for UNIX
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16083   Accepted: 5513

Description

You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow of information and ideas on the Internet as cumbersome and bureaucratic as possible.
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

The
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

A line containing a single non-negative integer indicating the smallest number of devices that cannot be plugged in.

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(网络流)的更多相关文章

  1. POJ1087 A Plug for UNIX(网络流)

    在会议开始之前,你收集所有记者想要使用的设备,并尝试设置它们.你注意到有些设备使用没有插座的插头.你想知道这些设备是否来自建造这个房间时并不存在的国家.对于一些插座,有几个设备使用相应的插头.对于其他 ...

  2. POJ1087 A Plug for UNIX —— 最大流

    题目链接:https://vjudge.net/problem/POJ-1087 A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K T ...

  3. POJ1087:A Plug for UNIX(最大流)

    A Plug for UNIX 题目链接:https://vjudge.net/problem/POJ-1087 Description: You are in charge of setting u ...

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

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

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

  7. POJ1087 A Plug for UNIX 【最大流】

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

  8. UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)

    解题报告 题意: n个插头m个设备k种转换器.求有多少设备无法插入. 思路: 定义源点和汇点,源点和设备相连,容量为1. 汇点和插头相连,容量也为1. 插头和设备相连,容量也为1. 可转换插头相连,容 ...

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

随机推荐

  1. <转>2015-7-14面试题

    由于一些原因,最近打算换一份工作,主要目标是大型的互联网公司.在经历了上周三天小公司试水后,昨天终于开始正式的面试之旅了(其实接到面试通知的就几家公司

  2. xcode6 ios launchimage

    1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image" 2.右侧的勾选可以让你选择是否要对ipad,横屏,竖屏,以及低版本的ios系 ...

  3. 网易云课堂 OCP

    数据库DBA任务: 管理数据库可用性 设计并创建数据库 管理物理结构 管理基于设计的存储 管理安全性 网络管理 备份与恢复 数据库调整与优化 关系型数据库(RDBMS) 多个表数据之间存在着关系 关系 ...

  4. grub2的使用

    1,添加win 启动项 edit file: /boot/grub2/grub.cfg 插入这几行: menuentry 'Windows XXX' { set root=(hd0,) chainlo ...

  5. 网络安全之PHP安全编程建议

    要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识.可能大部分 PHP 脚本都对安全问题都不在意,这很大程度上是因为有大量的 无经验程序员 在使用这门语言.但是,没有理由让你因为对你的代码的不 ...

  6. Windows Server 2012 R2 设置

    一.任务栏左下角启动服务器管理器,然后进行设置.1.登录不显示服务器管理器 2.本地服务器,看到右边的IE增强的安全配置,如图所示,关闭两项内容.这样就关闭了IE增强安全提示框. 3.“工具”菜单,启 ...

  7. XCode 自动化打包总结

    最近一个礼拜折腾xcode 中ipa 自动化打包,对我来说也说是磕磕碰碰.毕竟对mac下的命令行模式完全不熟悉.而且我们的项目是基于cordova的一个项目. 之前我自己对cordova 项目的命令行 ...

  8. hdoj-2025a

    #include "stdio.h"#include "string.h"void compare(int n,char s[],char &k);vo ...

  9. detangle c++ symbols

    hust$ c++filt  _ZN1AC2Ev hust$A::A()

  10. task2

    1. 邮件修改Mailtemplatereportfieldlink带<>的都改翻译${MAWBTask} 2.测试发邮件 3.找出能做成模版的所有地方,改成模版,复杂的地方记录下来