关键在建图,转换器连一条容量无限的边表示可以转化无数次,设备的插头连源点,插座连汇点。

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 (最大流)相关推荐

  1. uva 753 A Plug for UNIX

    最大流 OR 二分图匹配 题意:输入n,有n个插座,下面n行是每个插座的类型(最后24个字母来表示一个插座,没有空格放心用scanf,但是有可能插座会相同,但是这个没有什么影响) 输入m,有m个电器, ...

  2. UVA - 753 A Plug for UNIX(网络流)

    题意 给定一些插头设备和插座,有一些方法可以把其中一些插头变成另一种插头.求无法匹配插座的插头设备个数. 题解 用\(map\)给每个字符串标号为\(a_i\)和\(b_i\). 读入每种改变插头的方 ...

  3. POJ - 1087 A Plug for UNIX(最大流)

    题目链接:点击查看 题目大意:给出n个互不相同的设备,m个插座以及k种适配器,每种适配器都有无限个,适配器可以互相搭配,问如何匹配可以让尽可能多的设备用上电 题目分析:裸的最大流,就是加上了个字符串把 ...

  4. POJ 1087 A Plug for UNIX 会议室插座问题 构图+最大流

    题目链接:POJ 1087 A Plug for UNIX A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  5. 解题报告 之 POJ1087 A Plug for UNIX

    解题报告 之 POJ1087 A Plug for UNIX Description You are in charge of setting up the press room for the in ...

  6. POJ 1087 -- A Plug for UNIX(最大流,建图)(文末有极限数据)

    题目链接 Description You are in charge of setting up the press room for the inaugural meeting of the Uni ...

  7. 【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 ...

  8. poj 1087 A Plug for UNIX 【最大流】

    题目连接:http://poj.org/problem? id=1087 题意: n种插座 ,m个电器,f组(x,y)表示插座x能够替换插座y,问你最多能给几个电器充电. 解法:起点向插座建边,容量1 ...

  9. POJ1087A Plug for UNIX(会议室的插座)——最大流

    http://poj.org/problem?id=1087 题目描述: 现在由你负责布置Internet 联合组织首席执行官就职新闻发布会的会议室. 由于会议室修建时被设计成容纳全世界各地的新闻记者 ...

最新文章

  1. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。
  2. css深入浅出 宽度和高度
  3. oracle+挂载dbf,dbf导入oracle工具下载|OracleToDbf(dbf导入oracle工具) v1.2官方版 附教程_星星软件园...
  4. html的语义化面试题,前端面试题-HTML结构语义化
  5. 彩色烟雾一直是许多摄影师和摄影爱好者的首选武器
  6. Python暴力破解凯撒加密的文本
  7. QT之交叉编译qmake的ARM版本套件(三)
  8. tidyverse —— forcats包
  9. atitit.attilax的软件 架构 理念.docx 1. Atitit 软件设计的模型 frm lib standard 框架类库标准 FLS模型 2. fusco 3. Cirx
  10. 鸿蒙系统PC具体配置要求,原神pc电脑配置多少 原神游戏最低配置一览
  11. Deepin 20版 安装教程(Vmware)
  12. c语言pow的作用,c语言中pow函数的用法是什么?
  13. 计算机专业买笔记本电脑游戏本还是商务本好,购买笔记本电脑,游戏本真的是第一选择吗?...
  14. SQL Server远程连接的设置
  15. 我在上海对日外贸公司的经历
  16. 自建 CA 中心并签发 CA 证书
  17. aircrack-ng/airdrop-ng
  18. 微信小程序:简单舒服新UI装逼制作神器
  19. ​【技术】机器视觉技术原理解析及应用领域
  20. 入职华为od一个月的感受

热门文章

  1. 用vi在linux下查看16进制文件
  2. nltk英文词性标注
  3. This application failed to start because it could not find or load the Qt platform plugin xcb in
  4. for命令linux,linux中的for命令
  5. vuex的计算属性_Vuex详细介绍
  6. Android网络图片加载缓存处理库的使用---第三方库学习笔记(五)
  7. 从Storm到Flink,有赞五年实时计算效率提升实践
  8. javascript学习笔记(一)-廖雪峰教程
  9. MySQL的诡异同步问题-重复执行一条relay-log
  10. ahjesus 创建msdn一样的帮助文档