UVA 753 A Plug for UNIX (最大流)
关键在建图,转换器连一条容量无限的边表示可以转化无数次,设备的插头连源点,插座连汇点。
dinic手敲已熟练,输出格式又被坑,总结一下,输出空行多case的,一个换行是必要的,最后一个不加空行,有Testcase最后一个不要换行,没有testcase最后一个要加换行,想起那天gold miner PE了两发。
对dinic网络流的简单理解:bfs找有没有增广路,dfs增广。
关键的概念:反向边,给一个反悔的机会。
#include<bits/stdc++.h> using namespace std; int n,m; map<string,int> mp; map<string,int>::iterator it; #define MP make_pair #define PB push_back #define fi first #define se secondint id_cnt;int ID(const string &s) {if((it=mp.find(s))!=mp.end()) return it->se;mp.insert(MP(s,id_cnt));return id_cnt++; }const int maxn = 404, INF = 0x3f3f3f3f; int S,T; struct Edge {int v,nxt,cap,flow; }edges[maxn<<1];int head[maxn],cur[maxn],ecnt;void addEdge(int u,int v,int c) {edges[ecnt].nxt = head[u];edges[ecnt].cap = c;edges[ecnt].flow = 0;edges[ecnt].v = v;head[u] = ecnt++; }void AddEdge(int u,int v,int c) {addEdge(u,v,c);addEdge(v,u,0); }int d[maxn]; bool vis[maxn]; bool bfs() {memset(vis,0,sizeof(bool)*id_cnt);queue<int> q;q.push(S);d[S] = 0; vis[S] = true;while(q.size()){int u = q.front(); q.pop();for(int i = head[u]; ~i; i = edges[i].nxt){Edge &e = edges[i];if(!vis[e.v] && e.cap>e.flow){vis[e.v] = true;d[e.v] = d[u]+1;q.push(e.v);}}}return vis[T]; }int dfs(int u,int a) {if(u == T||!a) return a;int flow = 0,f;for(int &i = cur[u]; ~i; i = edges[i].nxt){Edge &e = edges[i];if(d[e.v] == d[u]+1 && (f = dfs(e.v,min(a,e.cap-e.flow))>0)){e.flow += f;edges[i^1].flow -= f;flow += f;a -= f;if(!a) break;}}return flow; }int MaxFlow() {int ret = 0;while(bfs()){memcpy(cur,head,sizeof(int)*id_cnt);ret += dfs(S,INF);}return ret; }void init() {memset(head,-1,sizeof(head));mp.clear(); id_cnt = 2;ecnt = 0; }int main() {//freopen("in.txt","r",stdin);char str1[42],str2[42];int Testcase; scanf("%d",&Testcase);S = 0; T = 1;while(Testcase--){int n,m,k;init();scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%s",str1);AddEdge(ID(str1),T,1);}scanf("%d",&m);for(int i = 0; i < m; i++){scanf("%s%s",str1,str2);AddEdge(S,ID(str2),1);}scanf("%d",&k);for(int i = 0; i < k; i++){scanf("%s%s",str1,str2);AddEdge(ID(str1),ID(str2),INF);}int ans = m-MaxFlow();printf("%d\n",ans);if(Testcase)putchar('\n');}return 0; }
转载于:https://www.cnblogs.com/jerryRey/p/4759107.html
UVA 753 A Plug for UNIX (最大流)相关推荐
- uva 753 A Plug for UNIX
最大流 OR 二分图匹配 题意:输入n,有n个插座,下面n行是每个插座的类型(最后24个字母来表示一个插座,没有空格放心用scanf,但是有可能插座会相同,但是这个没有什么影响) 输入m,有m个电器, ...
- UVA - 753 A Plug for UNIX(网络流)
题意 给定一些插头设备和插座,有一些方法可以把其中一些插头变成另一种插头.求无法匹配插座的插头设备个数. 题解 用\(map\)给每个字符串标号为\(a_i\)和\(b_i\). 读入每种改变插头的方 ...
- POJ - 1087 A Plug for UNIX(最大流)
题目链接:点击查看 题目大意:给出n个互不相同的设备,m个插座以及k种适配器,每种适配器都有无限个,适配器可以互相搭配,问如何匹配可以让尽可能多的设备用上电 题目分析:裸的最大流,就是加上了个字符串把 ...
- POJ 1087 A Plug for UNIX 会议室插座问题 构图+最大流
题目链接:POJ 1087 A Plug for UNIX A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- 解题报告 之 POJ1087 A Plug for UNIX
解题报告 之 POJ1087 A Plug for UNIX Description You are in charge of setting up the press room for the in ...
- POJ 1087 -- A Plug for UNIX(最大流,建图)(文末有极限数据)
题目链接 Description You are in charge of setting up the press room for the inaugural meeting of the Uni ...
- 【POJ - 1087】A Plug for UNIX(建图,网络流最大流)
题干: You are in charge of setting up the press room for the inaugural meeting of the United Nations I ...
- poj 1087 A Plug for UNIX 【最大流】
题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...
- POJ1087A Plug for UNIX(会议室的插座)——最大流
http://poj.org/problem?id=1087 题目描述: 现在由你负责布置Internet 联合组织首席执行官就职新闻发布会的会议室. 由于会议室修建时被设计成容纳全世界各地的新闻记者 ...
最新文章
- 读阮一峰对《javascript语言精粹》的笔记,我有疑问。
- css深入浅出 宽度和高度
- oracle+挂载dbf,dbf导入oracle工具下载|OracleToDbf(dbf导入oracle工具) v1.2官方版 附教程_星星软件园...
- html的语义化面试题,前端面试题-HTML结构语义化
- 彩色烟雾一直是许多摄影师和摄影爱好者的首选武器
- Python暴力破解凯撒加密的文本
- QT之交叉编译qmake的ARM版本套件(三)
- tidyverse —— forcats包
- atitit.attilax的软件 架构 理念.docx 1. Atitit 软件设计的模型 frm lib standard 框架类库标准 FLS模型 2. fusco 3. Cirx
- 鸿蒙系统PC具体配置要求,原神pc电脑配置多少 原神游戏最低配置一览
- Deepin 20版 安装教程(Vmware)
- c语言pow的作用,c语言中pow函数的用法是什么?
- 计算机专业买笔记本电脑游戏本还是商务本好,购买笔记本电脑,游戏本真的是第一选择吗?...
- SQL Server远程连接的设置
- 我在上海对日外贸公司的经历
- 自建 CA 中心并签发 CA 证书
- aircrack-ng/airdrop-ng
- 微信小程序:简单舒服新UI装逼制作神器
- ​【技术】机器视觉技术原理解析及应用领域
- 入职华为od一个月的感受
热门文章
- 用vi在linux下查看16进制文件
- nltk英文词性标注
- This application failed to start because it could not find or load the Qt platform plugin xcb in
- for命令linux,linux中的for命令
- vuex的计算属性_Vuex详细介绍
- Android网络图片加载缓存处理库的使用---第三方库学习笔记(五)
- 从Storm到Flink,有赞五年实时计算效率提升实践
- javascript学习笔记(一)-廖雪峰教程
- MySQL的诡异同步问题-重复执行一条relay-log
- ahjesus 创建msdn一样的帮助文档