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 ...
随机推荐
- codevs 1222 信与信封问题
/* 二分图 题目给出的是确定不连通的边 如果我们拿剩下的可能联通也可能不连通的边跑最大匹配 如果不是完美非配 也就是说把所有可能的边都认为是一定的 这样都跑不出来(不能匹配到每个点)那么一定不能确定 ...
- UWP app HelloWorld 的创建
步骤 1:在 Visual Studio 中创建新项目 启动 Visual Studio 2015 RC.将出现 Visual Studio 2015 RC 起始页. (从现在开始,我们将 Visua ...
- 【开源java游戏框架libgdx专题】-12-开发工具-图片合成
TexturePackerGui工具: 1.工具使用: 首先看到texturepacker的界面 界面介绍: New pack:创建项目按钮,单击后输入文件名称,创建文件. Input directo ...
- JavaBean学习--练习示例
初识Javabean,没感觉这鸟东西有什么好用的,一定是我太笨了 自己用jsp测试了下,这里用application作用域做个示例 <%@ page language="java&qu ...
- jquery获取value值
$(function(){ alert(1); var a=$("#a004").val(); var a1=$("#b004").val(); //.val就 ...
- Java POI 两种导出方式
这里面包含了模板导出方法和自定义模板进行导出 package jp.co.syspro.poo.action.hibikoyou; import java.io.ByteArrayOutputStre ...
- (转)dedecms代码详解 很全面
dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统.而模板系统也是其他 ...
- PLSQL远程连接到Oracle服务器
这里只介绍一种远程连接服务器方法,即本机安装了Oracle客户端和PLSql工具,服务器安装在虚拟机或者另一台电脑上 1.打开Oracle客户端的Net Manager,选择Oracle Net配置— ...
- js单条新闻向上滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- Linux下面/usr/local和opt目录
1./opt This directory is reserved for all the software and add-on packages that are not part of the ...