A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)
题意:
几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量
这个题可以用二分图做 , 我用的是最大流,最后用设备数 减去 最大匹配数即可
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <map>
- #include <queue>
- #define mem(a, b) memset(a, b, sizeof(a))
- using namespace std;
- const int maxn = , INF = 0x7fffffff;
- int head[maxn], d[maxn], cur[maxn];
- int n, m, s, t, z;
- int cnt;
- map<string, int> mapp;
- struct node{
- int u, v, c, next;
- }Node[maxn*];
- void add_(int u, int v, int c)
- {
- Node[cnt].u = u;
- Node[cnt].v = v;
- Node[cnt].c = c;
- Node[cnt].next = head[u];
- head[u] = cnt++;
- }
- void add(int u, int v, int c)
- {
- add_(u, v, c);
- add_(v, u, );
- }
- bool bfs()
- {
- queue<int> Q;
- mem(d, );
- Q.push(s);
- d[s] = ;
- while(!Q.empty())
- {
- int u = Q.front(); Q.pop();
- for(int i=head[u]; i!=-; i=Node[i].next)
- {
- node e = Node[i];
- if(!d[e.v] && e.c > )
- {
- d[e.v] = d[e.u] + ;
- Q.push(e.v);
- // cout<< u << " " << e.v << " " << t <<endl;
- if(e.v == t) break;
- }
- }
- }
- return d[t] != ;
- }
- int dfs(int u, int cap)
- {
- // cout<< cap <<endl;
- if(u == t || cap == )
- return cap;
- int ret = ;
- for(int &i=cur[u]; i!=-; i=Node[i].next)
- {
- node e = Node[i];
- if(d[e.v] == d[e.u] + && e.c > )
- {
- int V = dfs(e.v, min(cap, e.c));
- Node[i].c -= V;
- Node[i^].c += V;
- cap -= V;
- ret += V;
- // cout<< V <<endl;
- if(cap == ) break;
- }
- }
- return ret;
- }
- int dinic()
- {
- int ans = ;
- while(bfs())
- {
- memcpy(cur, head, sizeof(head));
- ans += dfs(s, INF);
- // cout<< ans <<endl;
- }
- return ans;
- }
- int main()
- {
- cin>> n;
- mem(head, -);
- s = , t = n + *m + *z + ;
- for(int i=; i<=n; i++)
- {
- string str;
- cin>> str;
- mapp[str] = i;
- add(s, i, );
- }
- cin>> m;
- for(int i=; i<=m; i++)
- {
- string str, sstr;
- cin>> str >> sstr;
- add(n+i, n+m+i, );
- add(n+m+i, t, INF);
- if(!mapp[sstr])
- {
- mapp[sstr] = n + m* + i;
- }
- add(mapp[sstr], n+i, INF);
- }
- cin>> z;
- for(int i=; i<=z; i++)
- {
- string u, v;
- cin>> u >> v;
- if(!mapp[u])
- mapp[u] = n+*m+i;
- if(!mapp[v])
- mapp[v] = n+*m+z+i;
- // add(s, mapp[v], INF);
- add(mapp[v], mapp[u], INF);
- }
- // cout<< m << " " <<dinic() <<endl;
- cout<< m - dinic() <<endl;
- return ;
- }
A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)的更多相关文章
- (网络流 模板)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 ...
- C - A Plug for UNIX - poj 1087(最大流)
题目大意:这个题意有些蛋疼,看了很大会才明白什么意思,有N个插座,这些插座都是有类型的只能给这种类型的电器充电,下面接着给了M种电器,和电器的插头类型,还有K种转换器,可以把一种类型转换成另一种,转换 ...
- poj 1986tarjan模板题
#include<iostream> #include<vector> using namespace std; const int N=40010; int pre[N];/ ...
- poj 1330lca模板题离线算法
#include<iostream> #include<vector> using namespace std; const int MAX=10001; int pre[MA ...
- Jungle Roads POJ - 1251 模板题
#include<iostream> #include<cstring> #include<algorithm> using namespace std; cons ...
- POJ 2823 Sliding Window (模板题)【单调队列】
<题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...
- HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)
HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...
- 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 ...
随机推荐
- Tensorflow[源码安装时bazel行为解析]
0. 引言 通过源码方式安装,并进行一定程度的解读,有助于理解tensorflow源码,本文主要基于tensorflow v1.8源码,并借鉴于如何阅读TensorFlow源码. 首先,自然是需要去b ...
- 使用Webuploader大文件分片传输
背景:50G大文件的HTTP上传至服务器. 好了,根据这个命题,可以开始研究我们怎么做才能把这么大的文件上传成功. 分片上传是肯定的,断点续传也是要有的,进度可视化那就更好了,基于这些,我选择了Web ...
- python---pandas.merge使用
merge 函数参数 ”’ merge: 合并数据集, 通过left, right确定连接字段,默认是两个数据集相同的字段 参数 说明 left 参与合并的左侧DataFrame right 参与合并 ...
- Luogu4156 WC2016 论战捆竹竿 KMP、同余类最短路、背包、单调队列
传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一 ...
- [UWP 自定义控件]了解模板化控件(2.1):理解ContentControl
UWP的UI主要由布局容器和内容控件(ContentControl)组成.布局容器是指Grid.StackPanel等继承自Panel,可以拥有多个子元素的类.与此相对,ContentControl则 ...
- Jmeter(二十九)_dotnet搭建本地接口服务
这里使用的服务名为Bookshelf,在github上,自行下载.要运行此服务,需要.Net Core SDK 2.1或更高版本.如果尚未安装,从.Net Core官方网站下载并安装. 在本地克隆项目 ...
- require.ensure的用法;异步加载-代码分割;
webpack异步加载的原理 webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这 个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的, ...
- 把cnblogs变成简书 - cnblogs博客自定义皮肤css样式
吐槽 博客园cnblogs作为老牌的IT技术博客类网站,为广大的开发者提供了非常不错的学习交流平台. 虽然博客内容才是重点,但是如果有赏心悦目的页面不更好吗! cnblogs可以更换博客模板,并且提供 ...
- 对于League of Legends的分析
League of Legends是一款在国内甚至国际上都很受欢迎的一款网络竞技行的游戏.它是由美国Riot Games开发,腾讯游戏运营的英雄对战网游.<英雄联盟>除了即时战略.团队作战 ...
- 第三周Linux学习报告
Linux内核源代码简介: arch/x86中内容重点关注 init目录重要,内核启动相关的代码基本上都在init目录下.如main.c等.Start_kernel函数相当于普通C程序的main函数. ...