multiset和树的dfs
multiset:
multiset 是 C++ 标准库中的一种容器,它存储一组元素,并保证这些元素按顺序排列。与 std::set 的区别在于,multiset 允许存储重复的元素,而 set 只存储唯一的元素。使用是multiset不能为空。
常用操作:
-
插入元素:使用
insert()方法插入元素。cpp复制编辑std::multiset<int> ms; ms.insert(5); ms.insert(10); ms.insert(5); // 插入重复的元素 -
删除元素:使用
erase()方法删除元素。可以删除特定的元素,也可以删除某个位置的元素。ms.erase(5); // 删除所有值为 5 的元素 ms.erase(ms.find(10)); // 删除第一个值为 10 的元素 //删除单个元素一般使用extract auto node = ms.extract(3); //删除元素并返回删除元素的迭代器 -
查找元素:使用
find()方法查找某个元素的位置。auto it = ms.find(5); if (it != ms.end()) { // 找到元素 } -
访问元素:可以通过迭代器访问元素。
for (auto it = ms.begin(); it != ms.end(); ++it) { std::cout << *it << " "; } -
获取元素个数:使用
count()方法获取某个元素出现的次数。int count = ms.count(5); // 获取 5 出现的次数 -
获取最大和最小元素:可以通过
begin()和rbegin()来访问最小和最大元素。int min_val = *ms.begin(); // 最小元素 int max_val = *ms.rbegin(); // 最大元素
例题:https://codeforces.com/contest/2114/problem/D
树的dfs:
树的邻接表存储
vector<vector<ll>> adj(n + 1);
for (int i = 1; i <= n - 1; i++)
{
ll u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
树的dfs
auto dfs = [&](auto& self, int u, int fa) -> void {
vis[u] = true;
for (int v : g[u]) {
if (vis[v]) continue;
fat[v] = u;
self(self, v, u);
}
};
dfs(dfs,1,0)

浙公网安备 33010602011771号