当前位置: 首页 > news >正文

做网站代理需要办什么营业执照大型手机网站制作

做网站代理需要办什么营业执照,大型手机网站制作,网站上线之后要做的工作,网网站制作正文 在了解了Ford-Fulkerson 和Edmonds-Karp之后,我们可以进一步学习更高效的算法——Dinic。 Dinic算法的时间复杂度是O(VE),实际运用过程中是比EK算法快的。 特性Ford-FulkersonEdmonds-Karp (EK)Dinic 增广路径选择 任意方式BFS找最短路径分层图多…

正文

在了解了Ford-Fulkerson 和Edmonds-Karp之后,我们可以进一步学习更高效的算法——Dinic。

Dinic算法的时间复杂度是O(V²×E),实际运用过程中是比EK算法快的。

特性Ford-FulkersonEdmonds-Karp (EK)Dinic

增广路径选择

任意方式BFS找最短路径分层图+多路增广
时间复杂度O(E×f)O(V×E²)O(V²×E)
实际效率不稳定中等
实现复杂度简单中等较复杂
适用场景教学示例小规模网络

大规模网络

首先我们要知道Dinic中几个重要的概念和优化。

分层图是通过BFS从源点开始,按照节点到源点的最短距离(边数),给所有节点分配层级(level)构建的。

在DFS中只允许向更深层的节点推进,避免“绕远路”。每次增广都沿着最短路径,提高效率。同时可以使得DFS一次找到多条增广路径。

阻塞流是指在当前分层图中,无法再找到从源点到汇点的增广路径的流。

不是最大流,但增加它会阻塞分层图中的所有路径。每次找到阻塞流后,必须重建分层图才能继续增广。Dinic算法每次迭代找到一个阻塞流,而非单条增广路径。

当前弧优化就是iter数组,记录了节点当前应该从哪条边开始检查

可以避免重复检查,每次重建分层图后要重置iter数组。跳过已检查的无效边,提高效率。此外,之后反向边的更新并不会影响之前的边。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 205;
const int INF = 1e18;
struct Edge {int to, cap, rev;
};
vector<Edge> g[N];
int level[N], iter[N];
void bfs(int s) {//重置层级memset(level, -1, sizeof(level));queue<int> q;level[s] = 0;q.push(s);while (!q.empty()) {int u = q.front(); q.pop();for (auto& e : g[u]) {if (e.cap > 0 && level[e.to] < 0) {level[e.to] = level[u] + 1;q.push(e.to);}}}
}int dfs(int u, int t, int f) {if (u == t) return f;for (int& i = iter[u]; i < g[u].size(); i++) {//从当前弧开始,引用确保一起增加auto& e = g[u][i];if (e.cap > 0 && level[u] < level[e.to]) {int d = dfs(e.to, t, min(f, e.cap));if (d > 0) {e.cap -= d;g[e.to][e.rev].cap += d;return d;}}}return 0;
}int max_flow(int s, int t) {int flow = 0;while (true) {bfs(s);if (level[t] < 0) break;//表示汇点不可达memset(iter, 0, sizeof(iter));int f;while ((f = dfs(s, t, INF)) > 0) {//dfs计算阻塞流flow += f;}}return flow;
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m, s, t;cin >> n >> m >> s >> t;for (int i = 0; i < m; ++i) {int u, v, w;cin >> u >> v >> w;g[u].push_back({ v, w, (int)g[v].size() });g[v].push_back({ u, 0, (int)g[u].size() - 1 });}cout << max_flow(s, t) << endl;return 0;
}

如有疑问,欢迎评论。

http://www.dtcms.com/a/446409.html

相关文章:

  • 深入理解CAS
  • 响应式网站开发方法系统首页设计
  • 华清远见25072班C++学习假期10.5作业
  • 【系统分析师】2024年下半年真题:综合知识-答案及详解(回忆版)
  • 网站代码的重点内容是什么wordpress 批量建站
  • 密码学系列 - 零知识证明(ZKP) - NTT运算
  • 商城网站建设明细自己弄个网站怎么赚钱
  • Android 系统下 getevent 工具
  • 学院网站建设方案软件开发自学入门教程
  • Deflate在线解压工具(支持无zlib头)
  • win7下winlogon.exe调试记录
  • 网站 做 app开发wordpress插件开发
  • 昆明做网站哪家便宜怎么让付费网站免费
  • 《C++进阶之C++11》【智能指针】(下)
  • 桐城网站定制软件开发的学校有哪些
  • 海南省工程建设定额网站简单网站首页
  • K230基础-特征检测
  • 宁波网站建设内容深圳网站开发建设服务公司
  • CTFHub 信息泄露通关笔记11:HG泄露(4种方法)
  • 网站采用什么方法建设wordpress获取文章信息
  • 上海网站建设公司招聘wordpress用手机写博客
  • 网站为什么要更新wordpress保护插件
  • Maixcam学习笔记-寻址色块和直线
  • 您正在 GUI 下运行 Fcitx,但是 fcitx-config-qt 未被找到。该软件包名称通常为 fcitx5-configtool。现在将打开配置目录
  • 速通web全栈开发
  • 网站建设虚拟服务器赣州新闻最新消息
  • 33.搜索旋转排序数组;153.寻找旋转排序数组中的最小值 4. 寻找两个正序数组的中位数
  • 4准则下,2可加模糊测度满足单调性和有界性约束。假设没有任何其他先验信息,基于Marichal熵最大的目标,求解莫比乌斯参数。
  • 果洛州wap网站建设公司wordpress用哪个国外空间
  • 【IMX6ULL驱动学习】INPUT子系统