题目描述:
现在由你负责布置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. windows下创建.htaccess文件之讲解

    如果想在Windows操作系统下新增一个.htaccess 文件实现对页面的rewrite,任你如何右点鼠标或者选文件->新增去新增都不会成功的,Windows都会要求给个文件名称.如果你想通过 ...

  2. 【锋利的JQuery-学习笔记】切换网页皮肤-且保存于Cookie

    切换网页皮肤: html片段: <head> <link rel="stylesheet" href="styles/skin/skin_0.css&q ...

  3. LoadAssetAtPath 与 Load 的区别

    一.官方的文档 Resources.LoadAssetAtPath Returns a resource at an asset path (Editor Only). This function a ...

  4. 【C++基础】构造函数

    说说你对构造函数的理解? 构造函数:对象创建时,利用特定的值构造对象(不是构造类),将对象初始化(保证数据成员有初始值),是类的一个public 函数 ①   与类同名 ②   无返回值 ③   声明 ...

  5. 【二叉树遍历模版】前序遍历&&中序遍历&&后序遍历&&层次遍历&&Root->Right->Left遍历

    [二叉树遍历模版]前序遍历     1.递归实现 test.cpp: 12345678910111213141516171819202122232425262728293031323334353637 ...

  6. lintcode 中等题:和大于S的最小子数组

    题目 和大于S的最小子数组 给定一个由 n 个整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组.如果无解,则返回 -1. 样例 给定数组 [2,3,1,2,4,3]  ...

  7. 推荐:根据ISBN号查询图书信息的API - 豆瓣API

    转帖,出处:http://blog.csdn.net/berryreload/article/details/9126645 版权声明:本文为博主原创文章,未经博主允许不得转载. 找了半天,还是豆瓣的 ...

  8. React-用Jest测试

    一. 1.目录结构 二.代码 1.CheckboxWithLabel.jsx var React = require('react/addons'); var CheckboxWithLabel = ...

  9. Android:改变Activity切换方式

    overridePendingTransition(enterAnim, exitAnim); Intent intent =new Intent(this,item2.class); startAc ...

  10. Qt出现警告 Unescaped backslashes are deprecated!解决办法

    Fixing Qt Warning: Unescaped backslashes are deprecated! From: http://www.openguru.com/2011/10/fixin ...