C - A Plug for UNIX - poj 1087(最大流)
题目大意:这个题意有些蛋疼,看了很大会才明白什么意思,有N个插座,这些插座都是有类型的只能给这种类型的电器充电,下面接着给了M种电器,和电器的插头类型,还有K种转换器,可以把一种类型转换成另一种,转换器也是可以串联使用的。

*********************************************************************************************************************
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std; const int MAXN = ;
const int oo = 1e9+; int G[MAXN][MAXN], layer[MAXN];
char s[MAXN][]; bool canLine(char s1[], char s2[])///判断转接口是否相同
{
if(strcmp(s1, s2) == )
return true;
return false;
}
bool bfs(int start, int End)
{
bool used[MAXN] = {};
queue<int> Q; Q.push(start);
memset(layer, -, sizeof(layer));
layer[start] = , used[start] = true; while(Q.size())
{
int u = Q.front();Q.pop(); if(u == End)return true; for(int i=; i<=End; i++)
{
if(G[u][i] && used[i] == false)
{
used[i] = true;
layer[i] = layer[u] + ;
Q.push(i);
}
}
} return false;
}
int dfs(int u, int MaxFlow, int End)
{
if(u == End)return MaxFlow; int uFlow = ; for(int i=; i<=End; i++)
{
if(G[u][i] && layer[i] == layer[u]+)
{
int flow = min(MaxFlow-uFlow, G[u][i]);
flow = dfs(i, flow, End); G[u][i] -= flow;
G[i][u] += flow; uFlow += flow; if(uFlow == MaxFlow)
break;
}
} return uFlow;
}
int dinic(int start, int End)
{
int MaxFlow = ; while( bfs(start, End) == true )
MaxFlow += dfs(start, oo, End); return MaxFlow;
} int main()
{
int N, M, K; while(scanf("%d", &N) != EOF)
{
int i, j; memset(G, , sizeof(G)); for(i=; i<=N; i++)///插头从1~N
scanf("%s", s[i]); scanf("%d", &M);
for(i=; i<=M; i++)///手机从N~N+M,忽略手机名字
scanf("%*s%s", s[i+N]); scanf("%d", &K);
///Ki是转换头进入的开始点,Kj是转换头出去的开始点,start是源点,End是汇点
int Ki = N+M, Kj = Ki+K, start = Kj+K+, End = start+;
for(i=; i<=K; i++)///转换器的进入从N+M~N+M+K,转换器的出从N+M+K~N+M+2*K
{///把入和出连接
scanf("%s%s", s[Ki+i], s[Kj+i]);
G[Ki+i][Kj+i] = oo;///转换器无限提供
} for(i=; i<=M; i++)
{///建立手机和转换器,插座的关系
for(j=; j<=N; j++)
{///匹配一下手机和插座是否直接可以相连
if( canLine(s[i+N], s[j]) == true)
G[i+N][j] = true;
}
for(j=; j<=K; j++)
{///匹配一下手机和转换器入是否可以相连
if( canLine(s[i+N], s[Ki+j]) == true)
G[i+N][Ki+j] = true;
}
} for(i=; i<=K; i++)
{///建立转换器与转换器或者插座的关系
for(j=; j<=K; j++)
{///匹配转换器出与转换器入,转换器无限提供,直接最大值
if(i!=j && canLine(s[Kj+i], s[Ki+j]) == true)
G[Kj+i][Ki+j] = oo;
}
for(j=; j<=N; j++)
{///匹配转换器出和插座的关系
if(canLine(s[Kj+i], s[j]) == true)
G[Kj+i][j] = true;
}
} for(i=; i<=M; i++)
{///源点与手机的关系
G[start][N+i] = true;
}
for(i=; i<=N; i++)
{///插座与汇点的关系
G[i][End] = true;
} printf("%d\n", M-dinic(start, End));
} return ;
}
C - A Plug for UNIX - poj 1087(最大流)的更多相关文章
- (网络流 模板)A Plug for UNIX -- poj -- 1087
链接: http://poj.org/problem?id=1087 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#probl ...
- C - A Plug for UNIX POJ - 1087 网络流
You are in charge of setting up the press room for the inaugural meeting of the United Nations Inter ...
- A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)
题意: 几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量 这个题可以用二分图做 , 我用的是最 ...
- POJ 1087 最大流裸题 + map
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15597 Accepted: 5308 ...
- 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 ...
- poj1087 A Plug for UNIX(网络流最大流)
http://poj.org/problem?id=1087 好久没遇见过这么坑的题了这个题真是挫的够可以的.题目大意:你作为某高管去住宿了,然后宾馆里有几种插座,分别有其对应型号,你携带了几种用电器 ...
- poj 1087 最大流
没啥好说的,慢慢建图 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 Out ...
- 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 ...
- 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 ...
随机推荐
- JavaScript--DOM增删改操作
JavaScript使用DOM操作节点来进行增删改操作 <!DOCTYPE html> <html> <head> <meta charset="U ...
- (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...
- 标量类型(scalar)
(ISO C11 §6.2.5) Arithmetic types and pointer types are collectively called scalar types. Array and ...
- 【转】 自定义iOS7导航栏背景,标题和返回按钮文字颜色
原文:http://blog.csdn.net/mad1989/article/details/41516743 UIBarButtonItem,navigationItem,backBarButto ...
- Ubuntu12.04安装insight-6.8
insight是在Linux下一个比较好用的GDB的前端 insight首页:http://sourceware.org/insight/index.php 在这里下载源码:insight-6.8.t ...
- 学习springMVC实例1——配置和跳转到HelloWorld
本文让大家迅速掌握springMVC的使用方法,以最简单的方式理解此框架 一.用eclipse新建一个web项目,命名为springMVC1,tomcat的端口号为9090 二.在WEB-INF目录下 ...
- Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建
1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...
- underscorejs-some学习
2.11 some 2.11.1 语法: _.some(list, predicate, [context]) 2.11.2 说明: 对list集合的每个成员根据predicate进行真值检测,如果一 ...
- 页面d初始化加载
1.$(document).ready(function () { alert("Hello Word!"); }); 或简写为 2.$(function(){ alert(&qu ...
- phalcon安装和输出 hello word
1:下载和安装Wampserver2.4-x86.exe 服务器: 2:到phalcon官方网站下载对应的dll文件 phalcon_x86_VC9_php5.4.0_1.2.5 我下的是这个版本 所 ...