题意:

给你n个插座,m个设备,每台设备都有对应的插座,有k个转接器。

要求:求满足不能插上插座的用电器最少个数

solution:

HINT:每种适配器都有无限个,所以建图的时候要改为INF。

答案为m-idnic()

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<cstring>
#define mp make_pair
#define pb push_back
#define first fi
#define second se
#define pw(x) (1ll << (x))
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define rep(i,l,r) for(int i=(l);i<(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define eps 1e-9
#define PIE acos(-1)
#define cl(a,b) memset(a,b,sizeof(a))
#define fastio ios::sync_with_stdio(false);cin.tie(0);
#define lson l , mid , ls
#define rson mid + 1 , r , rs
#define ls (rt<<1)
#define rs (ls|1)
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define freopen freopen("in.txt","r",stdin);
#define cfin ifstream cin("in.txt");
#define lowbit(x) (x&(-x))
#define sqr(a) a*a
#define ll long long
#define ull unsigned long long
#define vi vector<int>
#define pii pair<int, int>
#define dd(x) cout << #x << " = " << (x) << ", "
#define de(x) cout << #x << " = " << (x) << "\n"
#define endl "\n"
using namespace std;
int n,m,k;
const int maxn=;
map<string,int>ids; struct Edge{
int u,v,cap;
};
int S,T;
vi G[maxn];
int dep[maxn];
vector<Edge> edge;
inline int id(string s)
{
int m=sz(ids);
if(ids.count(s))return ids[s];
return ids[s]=m;
} void addedge(int u,int v,int cap)
{
edge.pb((Edge){u,v,cap});
edge.pb((Edge){v,u,});
int t=sz(edge);
G[u].pb(t-);
G[v].pb(t-);
} bool bfs()
{
cl(dep,-);
int Q[maxn];
int h=,t=;dep[S]=;Q[t]=S;
while(h<t){
// de(T);
int x=Q[++h];
if(x==T)return ;
rep(i,,sz(G[x])){
Edge& e=edge[G[x][i]];
// de(e.v);puts("here");
if(dep[e.v]==-&&e.cap){
dep[e.v]=dep[x]+;
Q[++t]=e.v;
}
}
}
return ;
}
int dfs(int x,int f)
{
if(x==T)return f;
int used=,t;
rep(i,,sz(G[x])){
Edge& e=edge[G[x][i]];
// dd(e.u),de(e.v);
if(e.cap&&dep[e.v]==dep[x]+){
t=dfs(e.v,min(e.cap,f));
e.cap-=t;edge[G[x][i]^].cap+=t;
used+=t;f-=t;
if(!f)return used;
}
}
if(!used)dep[x]=-;
return used;
}
int dinic()
{
int ans=;
while(bfs())ans+=dfs(S,INF);
return ans;
}
void mapping()
{
S=;
string in[maxn],out[maxn];id("S");
cin>>n;
FOR(i,,n)cin>>in[i];
cin>>m;
FOR(i,n+,n+m)cin>>in[i]>>out[i],addedge(,id(in[i]),),addedge(id(in[i]),id(out[i]),);
cin>>k;
FOR(i,n+m+,n+m+k)cin>>in[i]>>out[i],addedge(id(in[i]),id(out[i]),INF);
// FOR(i,1,n)dd(in[i]),de(id(in[i]));
T=n+m+k+;
FOR(i,,n)addedge(id(in[i]),T,);
}
int main()
{
mapping();
cout<<m-dinic()<<endl;
return ;
}

网络流,设备、插头和转接器建图(简单map的应用)的更多相关文章

  1. poj 1149 PIGS【最大流经典建图】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18727   Accepted: 8508 Description ...

  2. C - A Plug for UNIX (又是建图坑)

    题目链接:https://cn.vjudge.net/contest/68128#problem/C 没理解好题意真的麻烦,一上午就这么过去了..... 具体思路:按照 源点 ->插座-> ...

  3. joj 2453 candy 网络流建图的题

    Problem D: Candy As a teacher of a kindergarten, you have many things to do during a day, one of whi ...

  4. poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新

    题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...

  5. poj 3281 Dining 网络流-最大流-建图的题

    题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...

  6. HDU 3036 Escape 网格图多人逃生 网络流||二分匹配 建图技巧

    题意: 每一个' . '有一个姑娘, E是出口,'.'是空地 , 'X' 是墙. 每秒钟每一个姑娘能够走一步(上下左右) 每秒钟每一个出口仅仅能出去一个人 给定n*m的地图, 时限T 问全部姑娘是否能 ...

  7. LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图

    #6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  8. POJ 1637 Sightseeing tour 建图+网络流

    题意: 给定一个混合图,所谓混合图就是图中既有单向边也有双向边,现在求这样的图是否存在欧拉回路. 分析: 存在欧拉回路的有向图,必须满足[入度==出度],现在,有些边已经被定向,所以我们直接记录度数即 ...

  9. PIGS POJ - 1149网络流(最短增广路---广搜) + 建图

    题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...

随机推荐

  1. css加载没效果,查看网络显示类型为 text/plain 的解决方法

    当请求的css 文件的MIME 类型 为 text/plain 时,文件会当做 .txt 文件来处理,浏览器就会拒绝渲染 产生这样的问题和服务器的配置有关系 在服务器上加上下面两句就好了 搞定

  2. python计算出现错误

    用python计算39.8-0.1得出的结果是39.699999999999996 其他数字计算正确,唯独这个计算错误. 原因: 中文解释: https://docs.python.org/zh-cn ...

  3. 面试之HTML5 Web存储

    前几天面试遇到了一个题是问localStorage和sessionStorage的区别,当时的回答不是很全面,今天就针对这个问题做一下整理(概念,用法,区别) HTML5 Web存储,一个比 cook ...

  4. 微信小程序上传图片更新图像

    解决思路: 1. 调用wx.chooseImage 选择图片 2.wx.uploadFile 上传图片 3.调用后台接口进行修改操作 修改原来的头像 wx.chooseImage({ success: ...

  5. NET如何使用ELinq-实现增删改查

    1 通过对ELinq主页的参考和学习,以及在项目中(wpf项目中用到的)中应用,ORM框架中的ELinq确实非常的强大,特此以建立wpf项目为例子来总结下如何在项目中应用ELinq,要想使用这个框架首 ...

  6. persistence.xml模板配置

    1.右键创建的persistence.xml 2.选择2.0版本的模板 3.复制右侧代码,写入xml文件中 <?xml version="1.0" encoding=&quo ...

  7. sklearn--回归

    一.线性回归 LinearRegression类就是我们平时所说的普通线性回归,它的损失函数如下所示: 对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit-le ...

  8. GOLANG接口编程的最佳实践一 (sort.Sort(data Interface ) )

    package main import( "fmt" "sort" "math/rand" ) //定义一个武当派的结构体 type Wud ...

  9. VSCODE IDE开发工具的快捷键一览

    按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...

  10. curl命令的高级用法

    curl命令 是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS. ...