最小路径覆盖问题 最大流 原创 fish04 2022-05-27 20:16:06 博主文章分类:网络流 ©著作权 文章标签 #include #define i++ 文章分类 后端开发 ©著作权归作者所有:来自51CTO博客作者fish04的原创作品,请联系作者获取转载授权,否则将追究法律责任 最小路径覆盖数=顶点数-最大匹配数;找路径的时候,回溯找;#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#include//#pragma GCC optimize(2)using namespace std;#define maxn 200005#define inf 0x7fffffff//#define INF 1e18#define rdint(x) scanf("%d",&x)#define rdllt(x) scanf("%lld",&x)#define rdult(x) scanf("%lu",&x)#define rdlf(x) scanf("%lf",&x)#define rdstr(x) scanf("%s",x)typedef long long ll;typedef unsigned long long ull;typedef unsigned int U;#define ms(x) memset((x),0,sizeof(x))const long long int mod = 1e9;#define Mod 1000000000#define sq(x) (x)*(x)#define eps 1e-5typedef pair pii;#define pi acos(-1.0)//const int N = 1005;#define REP(i,n) for(int i=0;i<(n);i++)typedef pair pii;inline int rd() { int x = 0; char c = getchar(); bool f = false; while (!isdigit(c)) { if (c == '-') f = true; c = getchar(); } while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return f ? -x : x;}ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);}int sqr(int x) { return x * x; }/*ll ans;ll exgcd(ll a, ll b, ll &x, ll &y) { if (!b) { x = 1; y = 0; return a; } ans = exgcd(b, a%b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}*/int n, m;int st, ed;int fa[maxn];void init() { for (int i = 0; i <= 2 * n + 2; i++)fa[i] = i;}struct node { int u, v, nxt, w;}edge[maxn << 1];int head[maxn], cnt;void addedge(int u, int v, int w) { edge[cnt].u = u; edge[cnt].v = v; edge[cnt].nxt = head[u]; edge[cnt].w = w; head[u] = cnt++;}int rk[maxn];int bfs() { queueq; ms(rk); rk[st] = 1; q.push(st); while (!q.empty()) { int tmp = q.front(); q.pop(); for (int i = head[tmp]; i != -1; i = edge[i].nxt) { int to = edge[i].v; if (rk[to] || edge[i].w <= 0)continue; rk[to] = rk[tmp] + 1; q.push(to); } } return rk[ed];}int dfs(int u, int flow) { if (u == ed)return flow; int add = 0; for (int i = head[u]; i != -1 && add < flow; i = edge[i].nxt) { int v = edge[i].v; if (rk[v] != rk[u] + 1 || !edge[i].w)continue; int tmpadd = dfs(v, min(edge[i].w, flow - add)); if (!tmpadd) { rk[v] = -1; continue; } edge[i].w -= tmpadd; edge[i ^ 1].w += tmpadd; add += tmpadd; } return add;}int ans;void dinic() { while (bfs())ans += dfs(st, inf);}int findfa(int x) { if (x == fa[x]) { return x; } return fa[x] = findfa(fa[x]);}int vis[maxn];void output(int x) { printf("%d ", x); for (int i = head[x]; i != -1; i = edge[i].nxt) { if (edge[i].w == 0 && edge[i].v > n)output(edge[i].v - n); }}int main(){ //ios::sync_with_stdio(0); memset(head, -1, sizeof(head)); n = rd(); m = rd(); st = 0; ed = 2 * n + 1;init(); for (int i = 1; i <= m; i++) { int u, v; u = rd(); v = rd(); addedge(u, v + n, 1); addedge(v + n, u, 0); } for (int i = 1; i <= n; i++) { addedge(st, i, 1); addedge(i, st, 0); } for (int i = 1; i <= n; i++) { addedge(i + n, ed, 1); addedge(ed, i + n, 0); } dinic(); for (int i = 0; i < cnt; i++) { if (edge[i].u >= 1 && edge[i].u <= n && edge[i].v > n&& edge[i].w == 0) { fa[findfa(edge[i].v - n)] = findfa(edge[i].u); } } for (int i = 1; i <= n; i++) { if (findfa(i) == i) { output(i); printf("\n"); } } cout << n-ans << endl; return 0;} EPFL - Fighting 赞 收藏 评论 分享 举报 上一篇:餐巾计划问题 费用流 下一篇:【模板】最近公共祖先(LCA) 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 NumPy 差分、最小公倍数、最大公约数、三角函数详解 NumPy 助你处理数学问题:计算序列的差分用`np.diff()`,示例返回`[5, 10, -20]`;找最小公倍数(LCM)用`np.lcm()`,数组示例返回`18`;最大公约数(GCD)用`np.gcd.reduce()`,数组示例返回`4`;三角函数如`np.sin()`,`np.deg2rad()`用于角度弧度转换。别忘了`np.arcsin()`等反三角函数,以及`np.hypot()`求斜边长度。学习NumPy,科学计算更轻松! python numpy 后端开发 软件工程 程序人生 SpringBoot实现自定义路由覆盖 背景公司最近有一个项目二期需要对一些功能进行改造,涉及部分框架内置业务接口个性化定制,兼容老接口功能并且增加一部分新的数据返回,由于前端调用这些接口分布较多且较为零碎,修改测试成本较大,所以打算在框架层面提供路由覆盖功能,加快项目进度减少无技术含量的修改带来的系统风险设计提供自定义注解指定需要覆盖的路由及新路由地址系统启动时扫描所有注解数据并进行映射处理注册自定义路由映射配置类实现注解定义@Tar List 系统启动 自定义 JAVA8新特性之List的各种用法(最大、最小、平均值、分组、求和、遍历、过滤、排序) 构建User实体类供演示public class Users { /** * ID */ private Long id; /** * 用户名 */ private String name; /** * 年龄 */ private int age; /** * 工号 System List User 【wikioi】1904 最小路径覆盖问题(最大流+坑人的题+最小路径覆盖) http://wikioi.com/problem/1904/这题没看数据的话是一个大坑(我已报告官方修复了),答案只要求数量,不用打印路径。。。orz最小路径覆盖=n-最大匹配,这个我在说二分图匹配时讲过的。但是如果用最大流打印路径怎么办呢?在增广时记录增广路的点之间的链接,然后一个个打印即可。#... OI wikioi 网络流 最大流 #define luogu2764(最小路径覆盖->最大流) 看起来这么专有的名词应该是最大流的一个典型应用吧。。积累下来。。这个要求的是最小 #define #include 最大流 最小路径覆盖问题 嘟嘟嘟 这里就讲怎么做……因为为什么这么做以及证明我都不知道…… 首先,我们将原图的每一个点 i 都拆成 i 和 i +n 两个点。接着把所有 i 都和源点相连,边的容量为1,;把所有i + n 都和汇点相连,容量也为1。然后对于原图中的一条边(u, v),就在新图中连一条(u, v + n)的边。 编程开发 C 教程 1738: 最小路径覆盖问题 ——最小不相交路径覆盖 题意:给定有向图G=(V,E)。设P 是G 的一个简单路(顶点不相交)的集合。如果V 中每个 顶点恰好 i++ #include 最小路径覆盖 最小路径覆盖,最小点覆盖,最大独立点集(转) node 1:最小路径覆盖在一个PXP的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的 所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一 次);如果不考虑图中存在回路,那么每条路径就是一个弱连通子集.由上面可以得出:1.一个单独的顶点是一条路径;2.如果存在一路径p1,p2 图论 ACM 最大匹配数 最小路径覆盖 点集 BZOJ1927: [Sdoi2010]星际竞速(最小费用最大流 最小路径覆盖) 题意 "题目链接" Sol 看完题不难想到最小路径覆盖,但是带权的咋做啊?qwqqq 首先冷静思考一下:最小路径覆盖 = $n \text{二分图最大匹配数}$ 为什么呢?首先最坏情况下是用$n$条路径去覆盖(就是$n$个点),根据二分图的性质,每个点只能有一个和他配对,这样就保证了,每多出一个匹配 c语言 解题 BZOJ P2764 最小路径覆盖问题 $\color{ 0066ff}{题目描述}$ 给定有向图G=(V,E)。设P 是G 的一个简单路(顶点不相交)的集合。如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖。P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0。G 的最小路径覆盖是G 的所含路径条数 题 最小路径覆盖 与 最大独立点集 ## 最小路径覆盖 与 最大独立点集 ### 一、基本概念 **最小路径 最小路径覆盖 最大匹配数 二分图 1739: 魔术球问题——最小路径覆盖 题意:假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。 (1)每次只能在某根新... #include i++ ios [网络流24题] 最小路径覆盖问题 题目链接: "戳我" 感觉很套路了,就不多说了,直接上代码了。。。。 代码如下 图论——最大流 编程 计算 网络流中的最小路径覆盖问题 网络流中的最小路径覆盖问题建图方式:拆成两个点(源点连p1,p2连汇点)-对于边(u,v)(u,v)(u,v),连(up1,vp2)(u_{p 网络 图论 算法 #define ios 【PowerOJ1738&网络流24题】最小路径覆盖问题 (最大流) 题意: 思路: 【问题分析】 有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决。 【建模方法】 构造二分图,把原图每个顶点i拆分成二分图X,Y集合中的两个顶点Xi和Yi。对于原图中存在的每条边(i,j),在二分图中连接边(Xi,Yj)。然后把二分图最大匹配模型转化为网络流模型, #define 二分图 最小路径覆盖 最大匹配 建模 最小路径覆盖 Description定义: 一个不含圈的有向图G中,G的一个路径覆盖是一个其结点不相交的路径集合P,图中的每一个结点仅包含于P中的某一条路径。路径可以从任意结点开始和结束,且长度也为任意值,包括0。请你求任意一个不含圈的有向图G的最小路径覆盖数。 Inp... #include 最小路径覆盖 结点 有向图 i++ 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转) 在讲述这两个算法之前,首先有几个概念须要明确: 二分图: 二分图又称二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图。假设顶点V能够切割为两个互不相交的子集(A,B),而且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B), 则称图G是 二分图 最大匹配 最大独立集 最小顶点覆盖 连线 luogu2764 最小路径覆盖问题 «问题描述:给定有向图G=(V,E)。设P 是G 的一个简单路(顶点不相交)的集合。如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖。P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0。G 的最小路径覆盖是G 的所含路径条数最少... #include 最小路径覆盖 有向无环图 i++ 输入输出 【证明】最大闭合权值 最小路径覆盖 之前在给最大流题目分类,后来整理不知道怎么继续http://www.cnblogs.com/hua-dong/p/7834447.html毕竟最大流里面东西也多。重新整理一下已经理解的俩个类型。 【最小权闭合子图】 【结论】:最大权闭合子图=收益-最小割=收益-最大流,以下是自己YY的最小值比较法来 #include 最大流 i++ 子图 最小路径覆盖 hdu 3335(最小路径覆盖) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3335思路:有矛盾的条件一般都应该往匹配这方面想:能够整除的连边,于是答案(最小路径)==|顶点个数|-最大匹配。这儿要注意的地方就是要去掉相同的数(排序一下即可),然后就是hungry算法搞定就可以了。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace 图论 i++ #include ios 整除 python上面使用ansible 自从CFEngine 在1993年被Mark Burgess开发出来之后,配置管理工具就层出不穷了。像puppet 和chef,系统管理员可以有很多选择。Ansible 是一个新的配置管理工具,与其他工具不同的是,其他管理工具注重的是完整性和可配置性,而Ansible注重的是简单性和易用性。官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具 python上面使用ansible python ansible python Python YAML 解析curl springboot KDB 中的函数和右解析在其他的文章里要花专门的的一段去讲什么是函数和解析语法的优先级我觉得是没有必要的,因为只要稍有编程基础的都会显而易见的理解和快速跳过。但是我觉得对于刚开始学习kdb的人如果对本节的内容没有了解,此后一定会处处踩坑,苦不堪言。解析优先级一般很少提及,或者一般语言默认都是左解析,但是KDB的右解析是它的一大特色,故专门花些笔墨。1.函数。(1) 定义函数:f1:{[a;b]a+ 解析curl springboot 优先级 偏函数 解析器 360 以图搜图 python 利用360搜图爬取图片 最近闲得无聊,搞了个基于360搜图的图片爬取。用得都是比较基础的知识,所以这里也分享一下代码。本人也不是什么大佬。代码看看就行。**完整的代码在文章最后面。**下面我就简单介绍一下我爬取的过程。1.第一步首先我们要知道360关键字是用什么键来对应的,我记得360是q对应关键字,百度的是wd对应关键字。如下360连接https://image.so.com/i?q=%E9%A 360 以图搜图 python python html json 初始化 mysql update关联升级 一、何谓索引? 索引,简单说,就是排好序,查找的快的一种数据结构;二、sql为何慢? 1、查询语句写的烂; 2、索引失效:(单值、复合) 3、关联查询太多 4、服务器调优(缓冲、线程数)三、索引优势与劣势; 优势:提高检索效率,降低IO成本;降低数据的排序成本,降低CPU的消耗; 劣势:索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也需要占用空间,其次,在更新表时,不仅要更 mysql update关联升级 数据库 索引 mysql 字段 MySQL一主一从手动切换后需要更改数据源吗 管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对大家有帮助,互相交流。 一、mysql主从的原理 1、Replication 线程 Mysql 的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制 mysql 数据 数据库