模板
时间:2019-08-26
本文章向大家介绍模板,主要包括模板使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一般图匹配带花树
#include <bits/stdc++.h> using namespace std; const int maxm=50100; const int maxn=500; char ch[200]; int t,to[maxm],head[maxn],nex[maxm],tot; struct Blossom { int p[maxn], vi[maxn], tag, fl[maxn], c[maxn], pr[maxn], q[maxn], r; int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); } void add(int u, int v) { t++; to[t] = v; nex[t] = head[u]; head[u] = t; } int lca(int u, int v) { ++tag; u = find(u); v = find(v); for (;; swap(u, v)) if (u) { if (fl[u] == tag) return u; fl[u] = tag; u = find(pr[c[u]]); } } void blo(int u, int v, int l) { for (; find(u) != l; v = c[u], u = pr[v]) { pr[u] = v; if (vi[c[u]] == 1) vi[q[++r] = c[u]] = 0; if (find(u) == u) p[u] = l; if (find(c[u]) == c[u]) p[c[u]] = l; } } bool aug(int s) { for (int i = 1; i <= tot; i++) { p[i] = i; vi[i] = -1; } vi[q[r = 1] = s] = 0; int x, y; for (int i = 1; i <= r; i++) for (int j = head[x = q[i]]; j; j = nex[j]) if (vi[y = to[j]] == -1) { pr[y] = x; vi[y] = 1; if (!c[y]) { for (int u = x, v = y, t; u; v = t, u = pr[v]) { t = c[u]; c[u] = v; c[v] = u; } return 1; } vi[q[++r] = c[y]] = 0; } else if (!vi[y] && find(x) != find(y)) { int l = lca(x, y); blo(x, y, l); blo(y, x, l); } return 0; } void init() { t = 0; memset(head, 0, sizeof(head)); memset(c, 0, sizeof(c)); memset(pr, 0, sizeof(pr)); } }; int main() { int _, n, m; scanf("%d", &_); while (_--) { Blossom blossom; blossom.init(); scanf("%d%d", &n, &m); tot = n * 2 + m; for (int i = 1; i <= n; i++) { scanf("%s", ch + 1); blossom.add(i + m, i + m + n); blossom.add(i + m + n, i + m); for (int j = 1; j <= m; j++) if (ch[j] - '0') { blossom.add(j, i + m); blossom.add(i + m, j); blossom.add(j, i + m + n); blossom.add(i + m + n, j); } } int ans = 0; for (int i = 1; i <= tot; i++) { if (!blossom.c[i]) ans += blossom.aug(i); } printf("%d\n", ans - n); } return 0; }
原文地址:https://www.cnblogs.com/Accpted/p/11411713.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android Recyclerview实现水平分页GridView效果示例
- Android编程之ListView和EditText发布帖子隐藏软键盘功能详解
- 建造者模式_动力节点Java学院整理
- Android ScrollView嵌套横向滑动控件时冲突问题
- Android用户输入自动提示控件AutoCompleteTextView使用方法
- Android自定义View实现水波纹效果
- Android如何获取系统通知的开启状态详解
- Handler实现线程之间的通信下载文件动态更新进度条
- Android下Button实现图文混排效果
- android handler.post和handler.sendMessage的区别和联系
- 3小时带你开发一款商城类小程序(零基础入门小程序系列)
- Android 隐式Intent的实例详解
- Android编程使用加速度传感器实现摇一摇功能及优化的方法详解
- 微信小程序分页加载数据~上拉加载更多~小程序云数据库的分页加载
- TextView实现跑马灯效果 就这么简单!