ZOJ1157, POJ1087,UVA 753 A Plug for UNIX (最大流)
链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?
id=26746
题目意思有点儿难描写叙述 用一个别人描写叙述好的。
我的建图方法:一个源点一个汇点,和全部种类的插座。输入的n个插座直接与源点相连,容量为1,m个物品输入里 记录每一个插座相应的物品个数。物品数然后大于0的插座直接连到汇点。意味着终于的物品仅仅能由这些插座流出。中间的插座转换容量都是INF a b表示 不管多少b都能够选择转化到a。
/*--------------------- #headfile--------------------*/
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
/*----------------------#define----------------------*/
#define DRII(X,Y) int (X),(Y);scanf("%d%d",&(X),&(Y))
#define EXP 2.7182818284590452353602874713527
#define CASET int _;cin>>_;while(_--)
#define RII(X, Y) scanf("%d%d",&(X),&(Y))
#define DRI(X) int (X);scanf("%d", &X)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,n) for(int i=0;i<n;i++)
#define ALL(X) (X).begin(),(X).end()
#define INFL 0x3f3f3f3f3f3f3f3fLL
#define RI(X) scanf("%d",&(X))
#define SZ(X) ((int)X.size())
#define PDI pair<double,int>
#define rson o<<1|1,m+1,r
#define PII pair<int,int>
#define MAX 0x3f3f3f3f
#define lson o<<1,l,m
#define MP make_pair
#define PB push_back
#define SE second
#define FI first
typedef long long ll;
template<class T>T MUL(T x,T y,T P){T F1=0;while(y){if(y&1){F1+=x;if(F1<0||F1>=P)F1-=P;}x<<=1;if(x<0||x>=P)x-=P;y>>=1;}return F1;}
template<class T>T POW(T x,T y,T P){T F1=1;x%=P;while(y){if(y&1)F1=MUL(F1,x,P);x=MUL(x,x,P);y>>=1;}return F1;}
template<class T>T gcd(T x,T y){if(y==0)return x;T z;while(z=x%y)x=y,y=z;return y;}
#define DRIII(X,Y,Z) int (X),(Y),(Z);scanf("%d%d%d",&(X),&(Y),&(Z))
#define RIII(X,Y,Z) scanf("%d%d%d",&(X),&(Y),&(Z))
const double pi = acos(-1.0);
const double eps = 1e-6;
const ll mod = 1000000007ll;
const int M = 1005;
const int N = 605;
using namespace std; /*----------------------Main-------------------------*/
struct Edge {
int to, c, rev;
Edge() {}
Edge(int _to, int _c, int _rev) {
to = _to, c = _c, rev = _rev;
}
};
vector<Edge> G[N];
int lv[N], iter[N];
int n, m;
void BFS(int s) {
mem(lv, -1);
queue<int> q;
lv[s] = 0;
q.push(s);
while(!q.empty()) {
int v = q.front(); q.pop();
for(int i = 0; i < SZ(G[v]); i++) {
Edge &e = G[v][i];
if(e.c > 0 && lv[e.to] < 0) {
lv[e.to] = lv[v] + 1;
q.push(e.to);
}
}
}
}
int dfs(int v, int t, int f) {
if(v == t) return f;
for(int &i = iter[v]; i < SZ(G[v]); i++) {
Edge &e = G[v][i];
if(e.c > 0 && lv[v] < lv[e.to]) {
int d = dfs(e.to, t, min(f, e.c));
if(d > 0) {
e.c -= d;
G[e.to][e.rev].c += d;
return d;
}
}
}
return 0;
}
int MF(int s, int t) {
int res = 0;
for( ; ; ) {
BFS(s);
if(lv[t] < 0) return res;
mem(iter, 0);
int f;
while((f = dfs(s, t, 1e9)) > 0) {
res += f;
}
}
}
void add(int from, int to, int c) {
G[from].PB( Edge(to, c, SZ(G[to])) );
G[to].PB( Edge(from, 0, SZ(G[from]) - 1) );
}
int num[N];
int FF = 0;
void solve() {
if(FF) puts(""); FF = 1;
RI(n);
for(int i = 0; i < 300; i++) G[i].clear();
mem(num, 0);
int s = 0, k = 0;
map<string, int> vis;
for(int i = 1; i <= n; i++) {
string s1; cin >> s1;
vis[s1] = ++k;
add(s, i, 1);
}
RI(m);
for(int i = 1; i <= m; i++) {
string s1, s2;
cin >> s1 >> s2;
if(vis[s2] == 0) vis[s2] = ++k;
num[ vis[s2] ]++;
}
int t = k + 1;
for(int i = 1; i <= k; i++) {
if(num[i]) add(i, t, num[i]);
}
DRI(x);
k++;
for(int i = 1; i <= x; i++) {
string s1, s2;
cin >> s1 >> s2;
if(vis[s2] == 0) vis[s2] = ++k;
if(vis[s1] == 0) vis[s1] = ++k;
int u = vis[s2], v = vis[s1];
add(u, v, 1e9);
}
int ans = MF(s, t);
printf("%d\n", m - ans);
} int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
CASET
solve();
return 0;
}
ZOJ1157, POJ1087,UVA 753 A Plug for UNIX (最大流)的更多相关文章
- UVa 753 A Plug for UNIX (最大流)
题意:给定 n 种插座,m种设备,和k个转换器,问你最少有几台设备不能匹配. 析:一个很裸的网络流,直接上模板就行,建立一个源点s和汇点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 ...
- 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(网络流)
A Plug for UNIX You are in charge of setting up the press room for the inaugural meeting of the U ...
- 【poj1087/uva753】A Plug for UNIX(最大流)
A Plug for UNIX Description You are in charge of setting up the press room for the inaugural meeti ...
- UVA 753 A Plug for UNIX 电器插座(最大基数匹配,网络流)
题意: 给n个插座,m个设备(肯定要插电了),k种转换头可无限次使用(注意是单向的),问有多少设备最终是不能够插上插座的? 分析: 看起来就是设备匹配插座,所以答案不超过m.这个题适合用网络流来解. ...
- 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
最大流解决 . 设置源点 0,连接所有设备(device) .设备-插头 -汇点 #include <map> #include <set> #include <list ...
- UVA - 753 A Plug for UNIX(网络流)
题意 给定一些插头设备和插座,有一些方法可以把其中一些插头变成另一种插头.求无法匹配插座的插头设备个数. 题解 用\(map\)给每个字符串标号为\(a_i\)和\(b_i\). 读入每种改变插头的方 ...
随机推荐
- swf自动播放时如何全屏全部显示
在QQ Show里面看到一个很可爱的挂件,很想把它弄下来.弄下来的方法很简单,直接去网页缓存文件里面找.找到了之后,按下面的方法插入到网页中: 1 <object height="10 ...
- http登陆时的密码加密
系统设计登陆页面的时候,需要谨慎.因为登陆数据是在网络上进行传输,很可能中途被拦截. 最好的登陆是使用https,这样网络传输是安全的.google,baidu,alibaba都使用https的方式. ...
- 《c程序设计语言》读书笔记-5.3-指针实现strcat
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> ...
- Http错误大全
HTTP/IIS错误类型 1XX 信息提示 用于表示临时的响应.客户端在收到常规响应之前,应准备接受一个或多个1XX响应. 100 :继续101 :切换协议 2XX 成功 表示服务器成功地接受了客户端 ...
- Linux Mint---安装docky
这个安装的时候没啥难度,直接在软件中心安装一下就可以了,效果很赞的,linux下最棒的dock, 简洁大方,效果好! 只不有过一点需要注意,这个东东直接很上拖是添加不上去的 需要从/usr/share ...
- loj 数列分块入门 6 9(区间众数)
6 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及单点插入,单点询问,数据随机生成. 题解 参考:http://hzwer.com/8053.html 每个块内用一个\(vecto ...
- 文件夹操作-DirectoryInfo类
DirectoryInfo类是一个密封类,它可以用来创建.移动.枚举目录和子目录.DirectoryInfo类包括4个属性,可以用来获取目录的名称.父目录等. DirectoryInfo类的属性表 属 ...
- 配置和读取INI
#define MAX_FILE_PATH 260 void CControlDlg::OnBnClickedBtnGamepath() { // TODO: 在此添加控件通知处理程序代码 CFile ...
- 【原创】CMD命令设置IP地址
问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...
- HDU 2795.Billboard-完全版线段树(区间求最值的位置、区间染色、贴海报)
HDU2795.Billboard 这个题的意思就是在一块h*w的板子上贴公告,公告的规格为1*wi ,张贴的时候尽量往上,同一高度尽量靠左,求第n个公告贴的位置所在的行数,如果没有合适的位置贴则输出 ...