网络流
qq_45778406
这个作者很懒,什么都没留下…
展开
-
How Many to Be Happy?(最小割)
Link题意: 给n个点m,条边所构成的一个无向图, 令f[i]f[i]f[i]为让第i条边变成该图的ms中的一条边需要删除的最少的边。求1到n的f[i]的和1到n 的f[i]的和1到n的f[i]的和参考题解:对于一条边如果要加入u~v要加入MST则在连接u,v两个块中的所有的边中边权最小,所以只需考虑删除比e_uv边权更小的边, 所以考虑用比w_uv小的边建图, 然后求出这个图的最小割即可, 这样就可以把u和v分成两个块。最小割==最大流#include <bits/stdc++.h>原创 2021-03-28 21:51:59 · 98 阅读 · 0 评论 -
Magic Potion(网络流,二分图)
题意:有n个英雄, m个怪兽, k瓶药水, 每个英雄都有一个它可以杀的怪物集合, 但只能杀一个, 但如果喝了药水就可以再杀一个,注意每个怪物只能死一次, 每个英雄只能喝一瓶药水。问英雄们最多杀多少怪物。大概思路:网络流模板题, 只要建出图就可以得到答案,设置虚点pS ~P 流量为 kP~每个英雄 1S~每个英雄 1每个英雄~能杀的怪兽集合1怪兽~终点1重点:不能S~P n + k, 然后 p ~ 每个英雄 2, 因为这样会导致有可能超过k个人发出了大小为2的流量,与题意不和细节见于代码#原创 2021-03-12 15:49:59 · 172 阅读 · 0 评论 -
Code Names(最大独立集合)
Link题意:你得到了单词集W,一组N个单词,它们是彼此的相同字母异序词,任何单词中都没有重复的字母。一组单词S⊆W称为“无交换”,指如果无法通过交换x中的一对字母(不一定相邻)将单词x∈S转换为另一个单词y∈S。你需要从给定的单词集W中找出最大的无交换集S的大小。前置知识最小点覆盖:连接所有边所需的最小顶点数最大匹配数:图中形成一对一对的点的对数。最大独立集 === 总点数 −-− 最小点覆盖二分图: 图中至少存在两个点,且图中所有回路的长度均为偶数。在二分图中:最小顶点覆盖 = 最原创 2021-03-08 18:10:50 · 326 阅读 · 2 评论 -
网络流关键路径
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 510, M = 10010, INF = 1e8;int n, m, S, T;int h[N], e[M], f[M], ne[M], idx;int q[N], d[N], cur[N];bool vis_s[N], vis_t[N];void add(int原创 2020-12-17 21:55:57 · 204 阅读 · 0 评论 -
有源汇上下界最小流(两种模板)
给定一个包含 n 个点 m条边的有向图,每条边都有一个流量下界和流量上界。给定源T点 S和汇点 T,求源点到汇点的最小流。输入格式第一行包含四个整数 n,m,S,T。接下来 m行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。点编号从 1到 n。输出格式输出一个整数表示最小流。如果无解,则输出 No Solution。数据范围1≤n≤50003,1≤m≤125003,1≤a,b≤n,0≤c≤d≤2147483647,数据原创 2020-12-17 21:46:16 · 354 阅读 · 0 评论 -
有源汇上下界最大流
A - 有源汇有上下界最大流/*LibreOJ - 116给定一个包含 n 个点 m条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S和汇点 T,求源点到汇点的最大流。输入格式第一行包含四个整数 n,m,S,T。接下来 m行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。点编号从 1到 n。输出格式输出一个整数表示最大流。如果无解,则输出 No Solution。数据范围1≤n≤202,1≤m≤9999,1≤原创 2020-12-15 11:19:02 · 221 阅读 · 0 评论 -
最小费用最大流(理解紫书上的代码)
Key ponits在最小费用流问题中, 平行边变得有意义了:可能会有两条从u->v的弧,费用分别为1,2在没有费用的情况下, 可以把二者合并, 但由于费用的出现,无法合并这两条弧。再如, 如果边(u, v) (v, u)都存在,且费用都为负数。为了允许反悔(反向增广)规定cap[v][u] = 0并且cost[v][u] = -cost[u][v]表示沿着(u, v)相反方向增广是=时费用减少cost[u][v]#include<bits/stdc++.h>using name原创 2020-11-04 21:04:28 · 246 阅读 · 0 评论 -
Dining(网络流,拆点, 最大流,详细注释)
题目POJ - 3281题意n只牛,f种食物,d种食物,每只牛都有喜欢的食物和饮料,每头牛都有各自喜欢的食物和饮料,每种食物或饮料只能分配给一头牛。问最多能有多少头牛可以同时得到喜欢的食物和饮料。(每头牛只吃一份食物和饮料)Sample Input4 3 32 2 1 2 3 12 2 2 3 1 22 2 1 3 1 22 1 1 3 3Sample Output3本题如果只是分配食物的话,那么用二分图最大匹配就能够解决了。但遇到这种需要同时给一头牛分配所喜欢的食物原创 2020-11-03 19:55:54 · 273 阅读 · 0 评论