最小割
最小割就是最大流,(求完了之后的残留网络就是最小割) 最小割的求解方法在 Dinic 算法中,求完最大流后,残留网络中不再存在从源点到汇点的增广路径。此时,我们可以通过一次 BFS,从源点出发遍历残留网络,标记所有仍可到达的顶点。代码中的 minCut() 函数正是利用最后一次 BFS 计算的结果: cpp 复制编辑 std::vector<bool> minCut() { std::vector<bool> c(n); for (int i = 0; i < n; i++) { c[i] = (h[i] != -1); } return c; } 这里返回的布尔数组 c 表示每个顶点是否在源点 s 的可达集合 S 中。根据最大流最小割定理,从 S 到 T(不可达部分)的边就是最小割边。虽然函数本身只返回了 S 集合的信息,但你可以通过扫描所有边,找出那些一端在 S(c[u] == true)而另一端在 T(c[v] ==...
最大流
求解从源点s到汇点t的最大流量问题 Fold - fulkerson 依赖一个残留网络,每次更新一条从源点到汇点的路径的流量,在更新的时候同时在残留网络建立对应边的反边,直到残留网络没有从s - t的边, 最大流最小割定理 一个流是最大流,当且仅当他的残留网络不包含增广路径 Edmonds-Karps 对于Fold - fulkerson算法,虽然可以正确的找到他的最大流,但是他的时间复杂度依赖于边的权, 比如《算法竞赛》 P666, 对于Fold - fulkerson改进,使用bfs, 每次找到最短的增广路径,对该路径进行计算,可以大大优化时间复杂度, 一次bfs的时间复杂度是 o ( m ) , 对于bfs, 增广要处理n个点, m条边, 故时间复杂度为 o ( nm ), 综合起来时间复杂度是o ($n ^ 2 * m$) 代码 :1 先放一个jiangly代码 :...
反射
1. 反射机制概述Java 的反射机制允许程序在运行时获取类的信息,并对其进行操作,而无需在编译时知道具体的类结构。简单来说,反射使得程序可以动态加载类、检查类的成员(字段、方法、构造函数等)、调用方法和创建对象。正因为这种动态性,反射在很多框架(如 Spring、Hibernate)、依赖注入、动态代理等领域中被广泛使用。 2. 基本使用2.1 获取 Class 对象反射的入口是 java.lang.Class 对象,获取方式主要有三种: 使用 .class 语法: java 复制编辑 Class<String> clazz1 = String.class; 通过对象的 getClass() 方法: java 复制编辑 String str = "Hello"; Class<?> clazz2 = str.getClass(); 使用 Class.forName() 方法: 适合动态加载类,传入类的全限定名。 java 复制编辑 Class<?> clazz3 =...
类字节码
JVM 基础 - 类字节码详解 源代码通过编译器编译为字节码,再通过类加载子系统进行加载到JVM中运行。@pdai # 多语言编译为字节码在JVM运行计算机是不能直接运行java代码的,必须要先运行java虚拟机,再由java虚拟机运行编译后的java代码。这个编译后的java代码,就是本文要介绍的java字节码。 为什么jvm不能直接运行java代码呢,这是因为在cpu层面看来计算机中所有的操作都是一个个指令的运行汇集而成的,java是高级语言,只有人类才能理解其逻辑,计算机是无法识别的,所以java代码必须要先编译成字节码文件,jvm才能正确识别代码转换后的指令并将其运行。 Java代码间接翻译成字节码,储存字节码的文件再交由运行于不同平台上的JVM虚拟机去读取执行,从而实现一次编写,到处运行的目的。 JVM也不再只支持Java,由此衍生出了许多基于JVM的编程语言,如Groovy, Scala, Koltin等等。 #...
Java14新特性-Record类
Java 中的 Record 类Record 类是 Java 14 引入的一种新特性,旨在简化不可变数据类的定义。它类似于枚举类,用于标记不可变的数据类。Record 类通过减少样板代码,使得类的定义更加简洁和紧凑12。 Record 类的定义 使用 record 关键字可以定义一个 Record 类。例如,定义一个包含 start 和 end 两个字段的 range 类,可以这样写: public record range(int start, int end) {} 这相当于定义了一个 final 类,并自动实现了 equals、hashCode 和 toString 方法2。 使用示例 以下是一个使用 Record 类的示例: 12345678public class Main { public static void main(String[] args) { range r = new range(100, 200); System.out.println(r.start()); // 输出: 100 ...
分块
分块就是将一段数据分成一些小块, 对每个块单独处理使其不超过时间限制, 分块更多是一种思想,他介于线段树和树状数组之间。 一.给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,区间求和。输入格式 第一行输入一个数字 n。 第二行输入 n 个数字,第 i 个数字为 a_i,以空格隔开。 接下来输入 n 行询问,每行输入四个数字 \mathrm{opt}、l、r、c,以空格隔开。 若 \mathrm{opt} = 0,表示将位于 [l, r] 的之间的数字都加 c。 若 \mathrm{opt} = 1,表示询问位于 [l, r] 的所有数字的和 \bmod (c+1)。 思路 : 将数组分块每次加的时候,如果L与R在同一块里面,直接遍历该数组,最差时间复杂度O(nsqrt(n)),如果不是...
正则表达式
正则表达式用于对字符串的匹配判断中 元字符: 元字符 正则表达式中的写法 意义 . . 代表任意一个字符 \d \\d 代表0 - 9任意一个数字字符 \D \\D 代表任意一个非数字字符 \s \\s 代表空白字符, 如’\n’ , ‘\t’ \S \S 代表分空白字符 \w \w 代表可用作标识符的字符, 但不包括 “$” \W \W 代表不可以用作标识符的字符 \p{Lower} \p{Lower} 代表小写字母 a ~ z \p{Upper} \p{Upper} 代表大写字母 A ~ Z \p{ASCII} \p{ASCII} ASCII 字符 \p{Alpha} \p{Alpha} 字母字符 \p{Digit} \p{Digit} 十进制数字 \p{Alnum} \p{Alnum} 数字或字母字符 \p{Punct} \p{Punct} 标点符号 : “!@#$%^&、*()[]“等等 \p{Graph} \p{Graph} 可见字符:...
git简单使用
创建仓库 直接 git init将对应目录下一个文件夹变成git仓库 使用git clone从github上克隆一个已经有的项目到指定文件夹 检查.git文件创建成功,不能直接ls,因为ls不会显示》.git 得使用ls -a显示 git仓库包括两种: 本地仓库 远程仓库 commit : 提交,将本地文件和版本信息保存到本地仓库 push: 推送,将本地仓库和版本信息提交到远程仓库 pull : 拉取,将远程仓库文件和版本信息下载到本地文件 git GUI : 图形界面 常用命令 使用git 1. 全局设置12git config --global user.name 你的名字git confih --global user.email 你的邮箱 查看配置信息:1git config --list 上面设置的是git的初始化仓库,和github和gitee等的账号不一样 基本概念 版本库:前面看到的.git隐藏文件夹就是版本库,版本库中储存了配置信息,日志文件,版本信息等 工作区:...
HTML
html 是一门制作网页的语言。 1.html基本结构(骨架标签)1234567891011<!DOCTYPE html>//声明html类型(html5)<html lang="en">//语言是什么<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>yrb.个人网页</title></head><body> 我只能说教教我</body></html> 一般标签都是成对存在,称为双标签但是有的单标签不用如< br / > html标签 head标签代表页面的头,,定义一些特殊的内容,这些内容往往都是“不可见的内容”(浏览器页面不可见) < head...
Codeforces-1007div2题解
A - D1题解连续掉分ing, 什么时候才能变得又快又猛呢hehehe。。。 A. The Play Never Ends12345678910111213141516171819202122232425262728#include<bits/stdc++.h>using namespace std;using i64 = long long;void solve() { i64 k; cin >> k; if (k % 3 == 1) { cout << "Yes\n"; } else { cout << "No\n"; }}int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while(t--) { ...
