POJ1087 A Plug of UNIX
2024-09-04 21:01:19
你作为某高管去住宿了,然后宾馆里有几种插座,分别有其对应型号,你携带了几种用电器(手机,电脑一类的),也有其对应型号;可是不一定用电器就能和插座匹配上,于是宾馆的商店里提供了一些转换器,这些转换器可以将某一型号电源转换成另一型号的。问,你的用电器最少会有多少种无法充电
源点向电器连边,容量为1,电器向对应的插座连边,容量为1,对于转换器,在插座与插座之间连边,容量为inf,所有插座向汇点连边,容量为插座的个数~
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<map>
#include<iostream>
#include<string>
using namespace std;
const int maxn=;
const int inf=1e9;
queue<int> q;
int n;
int g[maxn][maxn];
int pre[maxn];
int flow[maxn];
int maxflow;
int bfs (int s,int t) {
while (!q.empty()) q.pop();
for (int i=;i<=n;i++) pre[i]=-;
pre[s]=;
q.push(s);
flow[s]=inf;
while (!q.empty()) {
int x=q.front();
q.pop();
if (x==t) break;
for (int i=;i<=n;i++)
if (g[x][i]>&&pre[i]==-) {
pre[i]=x;
flow[i]=min(flow[x],g[x][i]);
q.push(i);
}
}
if (pre[t]==-) return -;
else return flow[t];
}
void Edmonds_Karp (int s,int t) {
int increase=;
while ((increase=bfs(s,t))!=-) {
int k=t;
while (k!=s) {
int last=pre[k];
g[last][k]-=increase;
g[k][last]+=increase;
k=last;
}
maxflow+=increase;
}
}
map<string,int> pos;
int main () {
string s1,s2;
int N,M,cnt,st,ed;
while (~scanf("%d",&N)) {
pos.clear();
memset(g,,sizeof(g));
maxflow=;
st=;
ed=;
cnt=;
while (N--) {
cin>>s1;
pos[s1]=cnt;
g[][cnt++]=;
}
scanf ("%d",&M);
for (int i=;i<M;i++) {
cin>>s1>>s2;
if (pos[s1]==) pos[s1]=cnt++;
if (pos[s2]==) pos[s2]=cnt++;
g[pos[s1]][ed]=;
g[pos[s2]][pos[s1]]=;
}
scanf ("%d",&N);
while (N--) {
cin>>s1>>s2;
if (pos[s1]==) pos[s1]=cnt++;
if (pos[s2]==) pos[s2]=cnt++;
g[pos[s2]][pos[s1]]=inf;
}
n=cnt-;
Edmonds_Karp (st,ed);
printf ("%d\n",M-maxflow);
}
return ;
}
最新文章
- Java Swing 第02记 标签和按钮
- C语言中的运算符
- 使用NetBeans搭建基于Spring框架的Web应用
- Delphi 字符数组存入文件
- 【leetcode】Linked List Cycle
- iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库
- 布局文件中fill_parent、match_parent和wrap_content有什么区别?
- Linux busybox mount -a fstab
- (转)实战Memcached缓存系统(1)Memcached基础及示例程序
- 重命名计算机名称导致TFS版本管理下的工作区问题的修复
- java常用包
- java web 之 BeanUtils.populate的作用
- 不完全CSS3图解
- Sql Server 事物
- webpack4.x笔记-配置基本的前端开发环境(一)
- log4j控制指定包下的日志
- [Swift]JSON字符串与字典(Dictionary)、数组(Array)之间的相互转换
- webpack学习笔记——打包js
- 大数据spark学习第一周Scala语言基础
- go get 的使用