luogu P3386 【模板】二分图匹配
二次联通门 : luogu P3386 【模板】二分图匹配
- /*
- luogu P3386 【模板】二分图匹配
- 最大流
- 设置源点,汇点,连到每条边上
- 跑一边最大流即可
- */
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <queue>
- #define Max 100008
- #define INF 1e7
- using namespace std;
- inline int min (int a, int b)
- {
- return a < b ? a : b;
- }
- void read (int &now)
- {
- now = ;
- char word = getchar ();
- while (word > '' || word < '')
- word = getchar ();
- while (word >= '' && word <= '')
- {
- now = now * + word - '';
- word = getchar ();
- }
- }
- struct Edge
- {
- int from;
- int to;
- int flow;
- int next;
- }edge[Max << ];
- int deep[Max];
- int Edge_Count;
- int edge_list[Max];
- int S, T;
- inline void AddEdge (int from, int to, int dis)
- {
- Edge_Count++;
- edge[Edge_Count].to = to;
- edge[Edge_Count].flow = dis;
- edge[Edge_Count].next = edge_list[from];
- edge_list[from] = Edge_Count;
- }
- int Get_Flow (int now, int flow)
- {
- if (now == T || flow <= )
- return flow;
- int res = , pos;
- for (int i = edge_list[now]; i; i = edge[i].next)
- {
- if (deep[edge[i].to] != deep[now] + || edge[i].flow <= )
- continue;
- pos = Get_Flow (edge[i].to, min (edge[i].flow, flow));
- edge[i].flow -= pos;
- edge[i ^ ].flow += pos;
- res += pos;
- flow -= pos;
- if (flow <= )
- return res;
- }
- return res;
- }
- int E, N, M;
- int Answer;
- void Bfs ()
- {
- while (true)
- {
- bool flag = false;
- memset (deep, -, sizeof deep);
- queue <int> Queue;
- Queue.push (S);
- deep[S] = ;
- int now;
- while (!Queue.empty ())
- {
- now = Queue.front ();
- Queue.pop ();
- for (int i = edge_list[now]; i; i = edge[i].next)
- if (deep[edge[i].to] < && edge[i].flow)
- {
- deep[edge[i].to] = deep[now] + ;
- if (edge[i].to == T)
- {
- flag = true;
- break;
- }
- Queue.push (edge[i].to);
- }
- if (flag)
- break;
- }
- if (deep[T] <= )
- break;
- Answer += Get_Flow (S, INF);
- }
- }
- int main (int argc, char *argv[])
- {
- read (N);
- read (M);
- read (E);
- S = Max - ;
- T = Max - ;
- int x, y;
- for (int i = ; i <= E; i++)
- {
- read (x);
- read (y);
- if (x > M || y > M)
- continue;
- AddEdge (x, N + y + , );
- AddEdge (N + y + , x, );
- }
- for (int i = ; i <= N; i++)
- {
- AddEdge (S, i, );
- AddEdge (i, S, );
- }
- for (int i = ; i <= M; i++)
- {
- AddEdge (N + i + , T, );
- AddEdge (T, N + i + , );
- }
- Bfs ();
- printf ("%d", Answer);
- return ;
- }
luogu P3386 【模板】二分图匹配的更多相关文章
- [洛谷P3386] [模板] 二分图匹配 (匈牙利算法)
题目传送门 毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配. 网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿). 对于左边的点一个一个匹配,记 ...
- 【洛谷 p3386】模板-二分图匹配(图论)
题目:给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数. 解法:匈牙利算法.(以前我总是不记得......)实质上应该有贪心的思想,每次都尽量匹配,找到能和自己匹配的也尽量让它们匹配 ...
- 模板——二分图匹配KM
具体方法就不介绍了,详见 https://blog.csdn.net/sixdaycoder/article/details/47720471 主要讲一些注意点: 1:不直接将未匹配的y减小是因为要保 ...
- P3386 【模板】二分图匹配(匈牙利&最大流)
P3386 [模板]二分图匹配 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正 ...
- 洛谷—— P3386 【模板】二分图匹配
P3386 [模板]二分图匹配(复习) 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每 ...
- P3386 【模板】二分图匹配
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- AC日记——【模板】二分图匹配 洛谷 P3386
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- Dinic二分图匹配 || Luogu P3386
题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...
- 洛谷 P3386 【模板】二分图匹配
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
随机推荐
- 准备写个Golang开发的教程
进入golang的开发已经差不多两年了,最近打算写个Golang的教程.目的是让有开发基础,没接触过Golang的人能够愉快高效地写出Golang项目. 1 记得17年底时候,有个特别小的项目,准备试 ...
- 【并发】8、借助redis 实现多线程生产消费阻塞队列
顾名思义这个就是再消费的时候,不是之前的那哥用yield进行线程切换的操作,而是用线程等待阻塞的方式去执行,说实话我感觉效率不一定有之前那个好, 因为我对这种阻塞队列使用的时候,之前有发现阻塞队列,塞 ...
- 启动 docker 容器时报错
错误信息: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9300 -j DNAT --to-dest ...
- js垃圾回收及内存泄漏
js垃圾回收 js能够自动回收申请却未使用的内存,由于每次清除需要的性能较大,不是时时在刷新,而是每隔一段时间才进行一次. 回收的两种方式 标记清除(常用) 在内存中先标记变量,然后清除那些那些进入环 ...
- OpenStack kilo版(6) 启动第一台虚拟机
创建网络 提供者为external,类型为flat,网络名称为public,: root@controller:~# neutron net-create --shared --provider:ph ...
- Linux学习之五-Linux系统终端常用的快捷键
Linux系统终端常用的快捷键 (使用快捷键能大大提高效率,部分用在远程登录的工具如Xshell下) 剪切板操作(终端不支持,因为终端是纯命令行) Ctrl+insert 复制 Shift+i ...
- SSH安全优化
更改远程连接登陆的端口 禁止root管理员直接登陆 密码认证方式改为密钥认证 重要服务不使用公网IP地址 使用防火墙来限制来源IP地址 Port 666 变更SSH服务远 ...
- sqlalchemy.exc.CompileError: (in table 'user', column 'username'): VARCHAR requires a length on dialect mysql
映射数据库时报错:sqlalchemy.exc.CompileError: (in table 'user', column 'username'): VARCHAR requires a lengt ...
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-E. Let Them Slide-思维+数据结构
Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-E. Let Them Slide-思维+数据结构 [Problem ...
- PHP 把返回的数据集转换成Tree树
/** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * ...