题目描述:
现在由你负责布置Internet联合组织首席执行官就职新闻发布会的会议室。
由于会议室修建时被设计成容纳全世界各地的新闻记者,因此会议室提供了多种电源插座用
以满足(会议室修建时期)各国不同插头的类型和电压。不幸的是,会议室是很多年前修建的,
那时新闻记者很少使用电子设备,所以会议室对每种插座只提供了一个。新闻发布会时,新闻记
者需要使用许多电子设备,如手提电脑,麦克风,录音机,传呼机等等。尽管这些设备很多可以
使用电池,但是由于发布会时间很长并且是单调乏味的,记者们希望能够使用尽可能多的设备(这
些设备需要使用插座),以打发时间。
在发布会之前,你收集了记者们使用的设备的信息,开始布置会议室。你注意到有些设备的
插头没有合适的插座可用。你怀疑这些设备来自那些在修建会议室时不存在的国家。对有些插座
来说,有多个设备的插头可以使用。而对另一些插座来说,没有哪些设备的插头可以用得上。
为了试图解决这个问题,你光顾了附近的商店,商店出售转换器,这些转换器可以将一种插
头转换成另一种插头。而且转换器可以串联。商店没有足够多的转换器类型,满足所有的插头和
插座的组合,但对于已有某种转换器,总是可以提供无限多个。
// 将所有设备看成源点
// 每当有 设备 插头 : dev1 plui 那么 cap[s][plui]++
// 然后将n个插头连向汇点 流量为1
// 对于转换器 对于 每个 plugi plugj cap[plugi][plugj]=INF
// 把图画出来就清楚了 // 求出最大流就是被使用的插座数 #include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
#define MOD 1000000007
#define INF 1000000000
#define maxn 520
#define maxm 48010
#define LL __int64//long long
int M,K,C,N;
int cap[maxn][maxn],flow[maxn][maxn];
int level[maxn];
bool BFS(int s,int t){
memset(level,,sizeof(level));
queue<int> Q;
int u;
int i;
Q.push(s);
level[s]=;
while(!Q.empty()){
u=Q.front();
Q.pop();
if(u==t) return true;
for(i=;i<=t;i++)
if(!level[i]&&cap[u][i]>flow[u][i])
{
level[i]=level[u]+;
Q.push(i);
}
}
return false;
}
int dfs(int u,int maxf,int t){
if(u==t||maxf==) return maxf;
int ret=,f,i;
for(i=;i<=t;i++)
if(cap[u][i]>flow[u][i]&&level[u]+==level[i]){
f= dfs(i,min(maxf,cap[u][i]-flow[u][i]),t);
flow[u][i]+=f;
flow[i][u]-=f;
maxf-=f;
ret+=f;
if(maxf==) break;
}
return ret;
}
int Dinic(int s,int t){
int flow=;
while(BFS(s,t)){
flow+=dfs(s,INF,t);
}
return flow;
}
void init(){
memset(cap,,sizeof(cap));
memset(flow,,sizeof(flow));
}
char s1[],s2[];
int main(){
int T;
int i,j,k;
int n,m,nu=;
// scanf("%d",&T);
// while(T--){
map<string,int> mp;
map<string,int>::iterator it;
init();
scanf("%d",&n);
// T=n;
for(i=;i<=n;i++){
scanf("%s",s1);
it=mp.find(s1);
if(it==mp.end())
mp[s1]=++nu;
}
n=nu;//printf("%d ",n);
scanf("%d",&m);
for(i=;i<=m;i++){
scanf("%s %s",s1,s2);
it=mp.find(s2);
if(it!=mp.end()){
j=mp[s2];
cap[][j]++;
}else{
mp[s2]=++nu;
cap[][nu]++;
}
}
scanf("%d",&k);
while(k--){
scanf("%s %s",s1,s2);
it=mp.find(s1);
if(it==mp.end())
mp[s1]=++nu;
it=mp.find(s2);
if(it==mp.end())
mp[s2]=++nu;
i=mp[s1];
j=mp[s2];
cap[i][j]=INF;
}
// printf("?");
for(i=;i<=n;i++)
cap[i][nu+]=;
printf("%d\n",m-Dinic(,nu+)); // }
return ;
}

poj 1087 A Plug for UNIX的更多相关文章

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

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

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

  3. poj 1087 A Plug for UNIX 【最大流】

    题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...

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

  5. kuangbin专题专题十一 网络流 POJ 1087 A Plug for UNIX

    题目链接:https://vjudge.net/problem/POJ-1087 题目:有n个插座,插座上只有一个插孔,有m个用电器,每个用电器都有插头,它们的插头可以一样, 有k个插孔转化器, a ...

  6. poj 1087.A Plug for UNIX (最大流)

    网络流,关键在建图 建图思路在代码里 /* 最大流SAP 邻接表 思路:基本源于FF方法,给每个顶点设定层次标号,和允许弧. 优化: 1.当前弧优化(重要). 1.每找到以条增广路回退到断点(常数优化 ...

  7. 【poj 1087 a plug for UNIX】

    在大米饼的帮助下,终于找到了大米饼程序中如同大米饼一般的错误! 考点在问题转化,然后就跑一个你喜欢的最大流算法(二分图可以啵?) 再来一个例子吧: [纯手绘大米饼图片] 其中有的边权是1,否则就是in ...

  8. hdu 1087 A Plug for UNIX 最大流

    题意:http://www.phpfans.net/article/htmls/201012/MzI1MDQw.html 1.在一个会议室里有n种插座,每种插座一个: 2.每个插座只能插一种以及一个电 ...

  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. 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询

    相关资料: http://www.cnblogs.com/lyj/archive/2008/10/29/1322373.html 问题的提出: 1.延迟加载,可能会引起session已经关闭的异常,例 ...

  2. 从svn删除文件夹和文件

    由于项目开始放在自己项目组的一个服务器上,而且svn也是自己在该服务器上搭建的,但是不知道是什么原因,svn上的代码被误删了.为了更稳定地使用svn,所以使用公司的svn来管理代码. 运维将不是最新版 ...

  3. 函数执行到return就结束了

    遇到return,函数就结束了,不会往下执行 测试: class User { String name; int age; boolean fun1(int i){ if(i==1){ return ...

  4. Windows系统上如何使用SSH

    Windows系统上如何使用SSH 传统的网络服务程序如FTP.Telnet等,在网络上一般使用明文传送数据.用户账号和口令信息,容易受到中间人的攻击.用户利用SSH协议后能有效防止DNS及IP欺骗, ...

  5. set集合_定长

    //set集合的操作        //便利初始化函数        NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @&q ...

  6. python基础 - 文件读写

    完成功能: 从指定位置读文件到控制台 #! /usr/bin/python # coding=utf- 方法一. try: f = open ('/root/python/file/001.txt', ...

  7. tomcat作为windows服务启动失败解决方法

    再使用如下方法注册windows服务时,出现问题: set CATALINA_BASE=E:\tomcat\tomcat-web-server set CATALINA_HOME=E:\tomcat\ ...

  8. CVS 文件自动移 tag 的 Python 脚本

    CVS 文件自动移 tag 的 Python 脚本 背景 工作中使用的版本管理工具是 CVS,在两次发布中,如果修改的文件比较少,会选择用移 Tag 的方式来生成一个新 Tag 发布.文件比较少的情况 ...

  9. 在BSP的.bat文件下設置全局變量方法

    用于多個產品共用一個BSP的時候,在BSP的.bat文件中設置全局變量,去掉不需要加載的驅動和不同點是很好的方法. 一,舉例:BSP中.bat的一段code: set BSP_SMDK2443=1 s ...

  10. 什么是LBS?地理位置服务

    做微信开发中必有的LBS,查了下复制过来做个了解. 关键字:定位 服务 基于位置的服务,是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在GIS平台的支持下,为用户提 ...