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 second int 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 = , INF = 0x3f3f3f3f;
int S,T;
struct Edge
{
int v,nxt,cap,flow;
}edges[maxn<<]; 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 = ;
edges[ecnt].v = v;
head[u] = ecnt++;
} void AddEdge(int u,int v,int c)
{
addEdge(u,v,c);
addEdge(v,u,);
} int d[maxn];
bool vis[maxn];
bool bfs()
{
memset(vis,,sizeof(bool)*id_cnt);
queue<int> q;
q.push(S);
d[S] = ; 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]+;
q.push(e.v);
}
}
}
return vis[T];
} int dfs(int u,int a)
{
if(u == T||!a) return a;
int flow = ,f;
for(int &i = cur[u]; ~i; i = edges[i].nxt){
Edge &e = edges[i];
if(d[e.v] == d[u]+ && (f = dfs(e.v,min(a,e.cap-e.flow))>)){
e.flow += f;
edges[i^].flow -= f;
flow += f;
a -= f;
if(!a) break;
}
}
return flow;
} int MaxFlow()
{
int ret = ;
while(bfs()){
memcpy(cur,head,sizeof(int)*id_cnt);
ret += dfs(S,INF);
}
return ret;
} void init()
{
memset(head,-,sizeof(head));
mp.clear(); id_cnt = ;
ecnt = ;
} int main()
{
//freopen("in.txt","r",stdin);
char str1[],str2[];
int Testcase; scanf("%d",&Testcase);
S = ; T = ;
while(Testcase--){
int n,m,k;
init();
scanf("%d",&n);
for(int i = ; i < n; i++){
scanf("%s",str1);
AddEdge(ID(str1),T,);
}
scanf("%d",&m);
for(int i = ; i < m; i++){
scanf("%s%s",str1,str2);
AddEdge(S,ID(str2),);
}
scanf("%d",&k);
for(int i = ; 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 ;
}
UVA 753 A Plug for UNIX (最大流)的更多相关文章
- UVa 753 A Plug for UNIX (最大流)
题意:给定 n 种插座,m种设备,和k个转换器,问你最少有几台设备不能匹配. 析:一个很裸的网络流,直接上模板就行,建立一个源点s和汇点t,源点和每个设备连一条边,每个插座和汇点连一条边,然后再连转换 ...
- ZOJ1157, POJ1087,UVA 753 A Plug for UNIX (最大流)
链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action? id=26746 题目意思有点儿难描写叙述 用一个别人描写叙述好的. 我的 ...
- 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 ...
- UVA 753 - A Plug for UNIX(网络流)
A Plug for UNIX You are in charge of setting up the press room for the inaugural meeting of the U ...
- UVA 753 A Plug for UNIX(二分图匹配)
A Plug for UNIX You are in charge of setting up the press room for the inaugural meeting of the Unit ...
- UVa 753 - A Plug for UNIX(最大流)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 753 A Plug for UNIX 电器插座(最大基数匹配,网络流)
题意: 给n个插座,m个设备(肯定要插电了),k种转换头可无限次使用(注意是单向的),问有多少设备最终是不能够插上插座的? 分析: 看起来就是设备匹配插座,所以答案不超过m.这个题适合用网络流来解. ...
- UVA 753 A Plug for UNIX
最大流解决 . 设置源点 0,连接所有设备(device) .设备-插头 -汇点 #include <map> #include <set> #include <list ...
- UVA - 753 A Plug for UNIX(网络流)
题意 给定一些插头设备和插座,有一些方法可以把其中一些插头变成另一种插头.求无法匹配插座的插头设备个数. 题解 用\(map\)给每个字符串标号为\(a_i\)和\(b_i\). 读入每种改变插头的方 ...
随机推荐
- UVa 10213 How Many Pieces of Land ? (计算几何+大数)
题意:一块圆形土地,在圆周上选n个点,然后两两连线,问把这块土地分成多少块? 析:这个题用的是欧拉公式,在平面图中,V-E+F=2,其中V是顶点数,E是边数,F是面数.对于这个题只要计算V和E就好. ...
- HTML学习笔记(二)HTML格式化
很多标签都可以用来改变文本的外观,并为文本关联其隐藏的含义.总地来说,这些标签可以分成两类:基于内容的样式(content-based style)和物理样式(physical style). 一.基 ...
- MFC中CArray类原理及其应用
1.CArray类应用 函数简介CArray::GetSize int GetSize( ) const;取得当前数组元素个数. CArray::GetUpperBound int GetUpperB ...
- [Xcode 实际操作]二、视图与手势-(8)UIView视图的纹理填充
目录:[Swift]Xcode实际操作 本文将演示将导入的图片作为纹理,平铺整个屏幕. 往项目中导入一张图片. 点击底部左下角的图标->[Import]->选择需要导入的图片->[O ...
- CAS单点登录之服务端部署
一.CAS服务端搭建 1.1 CAS支持Http登录配置 CAS默认是要https的链接才能登录的,不过学习的话是可以先去掉https限制,本博客介绍的是基于Cas4.2.7的,之前改过4.0的,详情 ...
- JDK1.7 和 jetty配置教程
系统是windows 7 64位版本,32位版本同理,xp系统的自己google设置环境变量 打开设置环境变量窗口,右键计算机->我的电脑,选择属性 点击高级系统设置 选择环境变量 红线为需要设 ...
- mysql--浅谈查询1
这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师. 依赖软件:mysql5.6 系统环境:win 在谈查询之前,先说一个特别重要的概念 一定将列名看成变量,既然是变量就可以运算 一定将 ...
- struts工作原理
在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller.ActionProxy.ActionMapping.Configuration Man ...
- Jquery | 外部插入节点
after(content) : //在 span 元素外部的后面 插入 "<span><b>Write Less Do More</b><span ...
- [POJ1463] Strategic game
题目链接: 传送门 题目大意: Bob非常享受玩电脑游戏的过程,尤其是策略游戏,但是在有些时候,他因为不能在第一时间找到最佳的策略而十分伤心. 现在,他遇到了一个问题.他必须保卫一个中世纪的城市,有很 ...