题目描述:
现在由你负责布置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. Codeforces Round #240 (Div. 2)->A. Mashmokh and Lights

    A. Mashmokh and Lights time limit per test 1 second memory limit per test 256 megabytes input standa ...

  2. uva 10269 最短路

    求两次最短路 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> ...

  3. uva 307

    排序之后再剪枝,有点神 #include <cstdio> #include <cstdlib> #include <cmath> #include <map ...

  4. jquery加入收藏代码

    <html> <head> <script type="text/javascript" src="jquery-1.9.1.js" ...

  5. cf div2 234 E

    E. Inna and Binary Logic time limit per test 3 seconds memory limit per test 256 megabytes input sta ...

  6. Matlab安装

    第一步:下载MATLAB 7.0,下载自己百度下就好. 三个ios文件 第二步:把每个IOS文件直接右键解压就好. 第三步:打开第一个解压文件夹.双击.exe文件 第四步:next之后把序列号黏贴上去 ...

  7. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  8. 【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类

    该代码是两年前写的,现在看起来有点渣了,仅仅是提供一个思路,现在做一些Api开发的时候官方会有一些SDK,这些SDK其实原理都是通过socket来通讯的,其实我个人主张用curl更方便,当然前提是你的 ...

  9. 保障视频4G传输的流畅性,海康威视摄像头相关设置

    我们目前的rtsp视频解决方案如下: 摄像头<---------->NVR(通过4G上传)<---------->easydarwin<---------->自己的 ...

  10. Android:设计之屏幕适配

    据统计目前市场Android手机的分辨率有是10余种,分辨率如此广泛使得我们在处理分辨率适应方便遇到不少难题,本文就此难点记录设计与实际布局中的解决技巧. 以320x480为蓝本设计布局 因为Andr ...