AtCoder ABC239G 最小割集
题意
传送门 AtCoder ABC239G Builder Takahashi
题解
将原图中每个节点拆为入点 v v v 与出点 v ′ v' v′,对于原图任一边 ( u , v ) (u,v) (u,v) 则 u ′ → v , v → u u'\rightarrow v, v\rightarrow u u′→v,v→u 连一条容量为 ∞ \infty ∞ 的边,对于原图每一个点, v → v ′ v\rightarrow v' v→v′ 连一条容量为 c v c_v cv 的边。此时答案为新图的最小割。
对于最小割集的求解,求解最大流后,从源点出发在残余网络中 DFS,对所有可达的点打上标记,最终满足 v v v 被标记而 v ′ v' v′ 未被标记的节点则属于最小割集。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll INF = 1e18;
struct MaxFlow {struct Edge {int to;ll cap;int rev;};vector<int> iter, level;vector<vector<Edge>> g;MaxFlow(int n) : iter(n), level(n), g(n) {}void add_edge(int from, int to, ll cap) {g[from].push_back({to, cap, (int)g[to].size()});g[to].push_back({from, 0, (int)g[from].size() - 1});}void bfs(int s) {fill(level.begin(), level.end(), -1);queue<int> q;level[s] = 0;q.push(s);while (!q.empty()) {int v = q.front();q.pop();for (auto [to, cap, _] : g[v]) {if (cap > 0 && level[to] == -1) {level[to] = level[v] + 1;q.push(to);}}}}ll dfs(int v, int t, ll f) {if (v == t) {return f;}for (int &i = iter[v]; i < (int)g[v].size(); ++i) {auto &e = g[v][i];if (e.cap > 0 && level[v] < 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;}ll max_flow(int s, int t) {ll flow = 0;for (;;) {fill(iter.begin(), iter.end(), 0);bfs(s);if (level[t] == -1) {return flow;}ll f;while ((f = dfs(s, t, INF)) > 0) {flow += f;}}}
};
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m;cin >> n >> m;MaxFlow flow(n * 2);for (int i = 0; i < m; ++i) {int u, v;cin >> u >> v;u -= 1, v -= 1;flow.add_edge(v + n, u, INF);flow.add_edge(u + n, v, INF);}for (int v = 0; v < n; ++v) {int c;cin >> c;flow.add_edge(v, v + n, c);}cout << flow.max_flow(0 + n, n - 1) << '\n';vector<int> used(2 * n);auto dfs = [&](auto dfs, int v) -> void {used[v] = 1;for (auto [to, cap, _] : flow.g[v]) {if (cap > 0 && !used[to]) {dfs(dfs, to);}}};dfs(dfs, 0 + n);vector<int> vs;for (int v = 0; v < n; ++v) {if (used[v] && !used[v + n]) {vs.push_back(v);}}cout << (int)vs.size() << '\n';for (int v : vs) {cout << v + 1 << ' ';}cout << '\n';return 0;
}
相关文章:
AtCoder ABC239G 最小割集
题意 传送门 AtCoder ABC239G Builder Takahashi 题解 将原图中每个节点拆为入点 v v v 与出点 v ′ v v′,对于原图任一边 ( u , v ) (u,v) (u,v) 则 u ′ → v , v → u u\rightarrow v, v\rightarrow u u′→v,v→u 连一条容量为 ∞ \infty ∞ 的边&…...

Simple RPC - 01 框架原理及总体架构初探
文章目录 概述RPC 框架是怎么调用远程服务的?客户端侧的逻辑服务端侧的逻辑完整流程 客户端是如何找到服务端地址的呢?核心:NamingService跨语言的RPC实现原理 RPC 框架的总体结构对外接口服务注册中心如何使用业务服务接口客户端服务端 模块…...

VScode运行C/C++
VScode运行C/C VScode的安装这里不讲 一、mingw64的下载 二、VS code打开文件夹与创建C文件 ----------------这一步给萌新看,有C和VScode的基础可跳过---------------- 1.创建一个文件夹 2.vscode打开刚刚创建的文件夹 3.新建文件,在输入文件名1.c后…...
#智能车项目(三)串口初始化
串口1初始化 初始化串口1PA9 PA10 流程 1、声明结构体 GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; 2、打开时钟 // 打开串口GPIO的时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE); /…...
网络通信错误代码列表 HTTP 、FTP
HTTP 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议…...

最新开源ThinkPHP6框架云梦卡社区系统源码/亲测可用(全新开发)
源码简介: 最新开源ThinkPHP6云梦卡社区系统源码,它是一款基于ThinkPHP 6框架开发的开源社区系统源码。该系统源码具有强大而稳定的后端架构,和简洁易操作的前端界面,能够给人们提供完整的社区功能和更具体的服务。 全新云梦卡社…...

[ROS2系列] ubuntu 20.04测试rtabmap
目录 背景: 一、配置 turtlebot3 二、安装RTAB-Map ROS2包: 三、启动 Turtlebot3 模拟器: 四、启动 RTAB 地图: 五、启动导航(nav2_bringup应安装软件包): 背景: 1、设备&…...

【Java学习之道】JavaFx 框架与组件介绍
引言 如果你曾经尝试过使用Java编写一个漂亮的窗口应用程序,那么你一定知道JavaFX这个强大的工具。JavaFX是Java 8中引入的一个GUI开发框架,它提供了丰富的组件和功能,使得我们可以轻松地创建出功能强大、界面美观的桌面应用程序。无论你是想…...
Windows bat 脚本设计-开机自启动服务的方法、bat 调用另外的 bat 脚本 -没有java环境也能运行jar,在不安装jdk下如何运行jar包
目录 一、start.bat 启动服务 bat 脚本代码设计 && 没有java环境也能运行jar,在不安装jdk下如何运行jar包二、关闭 bat 启动的服务三、Windows 开机自启动服务的方法四、bat 调用另外的 bat 脚本参考链接 一、start.bat 启动服务 bat 脚本代码设计 &&am…...

zabbix触发器与动作
一、触发器(Trigger) 1、概念: 在 Zabbix 中,触发器用于监测 Zabbix 监控系统中的各种指标和条件,并在特定条件满足时触发警报。(触发器用于定义监控项的报警阈值) 2、触发器对象:…...
华纳云:Nginx服务器可视化配置问题怎么解决
Nginx服务器可视化配置问题通常是由于缺少适当的工具或配置导致的。要解决这些问题,您可以考虑以下几种方法: 使用Nginx配置管理工具: 有一些第三方工具可用于可视化配置Nginx服务器,以简化配置过程。其中一些工具包括cPanel、Ple…...
C指针与一维二维数组、数组指针与指针数组、函数指针_数组的理解使用
文章目录 一、指针数组 和 数组指针① 数组指针② 指针数组 二、函数指针与函数指针数组① 函数指针② 函数指针数组 三、指针与一维、二维数组① 指针与一维数组② 指针与二维数组 一、指针数组 和 数组指针 ① 数组指针 数组指针(Array Pointer)是指…...
安装运行vue-element-admin的报错问题-解决办法
文章目录 1.第一处2.第二处3.安装运行 在使用vue-element-admin时,使用命令安装: npm install -registryhttps://registry.npm.taobao.org会报错,不通过。需要修改两处。 1.第一处 在目录vue-element-admin-master\src\components\Markdown…...

高数笔记03:几何、物理应用
图源:文心一言 本文是我学习高等数学几何、物理应用的一些笔记和心得,希望可以与考研路上的小伙伴一起努力上岸~~🥝🥝 第1版:查资料、画导图~🧩🧩 参考资料:《高等数学 基础篇》武…...

js + selenium 获取chatgpt的accessToken
chatgpt的accessToken非常有用,在做web api对接时,因为登录超时 会刷新accessToken let elements document.querySelectorAll(.token-string);let concatenatedText [8,9,10].map(index > {return elements[index] ? elements[index].textContent …...
Spring MVC 十一:中文乱码
SpringMVC的中文乱码问题其实已经不是什么问题了,无非就是配置编码方式->解决问题。 但是由于SpringMVC可以通过:xml方式配置、Servlet3.0方式配置,以及是否使用EnableWebMvc等,不同配置方式下,解决中文乱码问题的…...

Excel恢复科学技术法显示的数据
Excel中输入位数较大的数据时,软件会自动使用科学计数法显示。很多时候并不需要这样的计数格式,所以需要把它转变为普通的数字格式 操作方法 选中单元格/列/行》右键》设置单元格式 在打开的窗口中,切换到“数字”选项卡,点击“自…...

springboot 志同道合交友网站演示
springboot 志同道合交友网站演示 liu1113625581...

如何理解BFC、开启BFC、BFC解决哪些问题
1.BFC 概念 BFC 英文名为 Block Formatting Context (块级格式化上下文) 具体可查看 MDN 2.BFC的作用 元素开启BFC后,子元素不会发生margin塌陷问题元素开启BFC后,子元素浮动,元素不发生高度塌陷元素开启BFC后,该元素不被其他元…...

3D包容盒子
原理简述 包围体(包容盒)是一个简单的几何空间,里面包含着复杂形状的物体。为物体添加包围体的目的是快速的进行碰撞检测或者进行精确的碰撞检测之前进行过滤(即当包围体碰撞,才进行精确碰撞检测和处理)。包…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...