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

2023 CCPC 深圳 F

F. Gift

基环树处理环。

给一棵基环树,要求删掉一条边后还是一棵树,说明只能删掉这棵基环树上的环上的边。

删掉边后还要保证以 \(p\) 作为根节点时,其他节点的儿子数量不超过 \(3\),说明根节点的度数一定是小于等于 \(3\) 的,除此之外,如果树上存在度数大于 \(4\) 的点,那么无论如何都无法满足该要求。

所以我们可以总体维护度数小于 \(4\) 的、等于 \(4\) 的、大于 \(4\) 的,然后枚举环上的边,看删掉之后是否还存在度数大于 \(4\) 的点,有就跳过,否则加上度数小于 \(4\) 的个数。

点击查看代码
#include <bits/stdc++.h>using namespace std;using i64 = long long;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<int> in(n + 1);vector e(n + 1, vector<int>());for (int i = 1; i <= n; i += 1) {int u, v;cin >> u >> v;e[u].push_back(v);e[v].push_back(u);in[u] += 1, in[v] += 1;}int idx = 0;bool found = false;vector<int> loop,dfn(n + 1, 0), fa(n + 1, 0);function<void(int)> dfs = [&](int u) {dfn[u] = ++idx;for (int v : e[u]) {if (v == fa[u]) {continue;}if (!dfn[v]) {fa[v] = u;dfs(v);if (found) {return;}}else if (dfn[v] < dfn[u]) {int cur = u;while (cur != v) {loop.push_back(cur);cur = fa[cur];}loop.push_back(v);found = true;return;}}};dfs(1);i64 ans = 0;int cnt[3] {};auto update = [&](int x, int v)->void{if (in[x] > 4) {cnt[2] += v;}else if (in[x] > 3) {cnt[1] += v;}else { cnt[0] += v; }};for (int i = 1; i <= n; i += 1) {update(i, 1);}int m = loop.size();for (int i = 0; i < m; i += 1) {int x = loop[i], y = loop[(i + 1) % m];update(x, -1), update(y, -1);in[x] -= 1, in[y] -= 1;update(x, 1), update(y, 1);if (!cnt[2]) {ans += cnt[0];}update(x, -1), update(y, -1);in[x] += 1, in[y] += 1;update(x, 1), update(y, 1);}cout << ans << "\n";return 0;
}
http://www.gsyq.cn/news/8289.html

相关文章:

  • 完整教程:【算法】双指针(三)[快慢指针]-快乐数
  • 9.19做题资料:哈希表查找时间复杂度分析
  • 实用指南:容器逃逸漏洞
  • 深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展
  • 三种方式处理SpringBoot全局异常
  • 2025.9.19 计数dp小记
  • sign up - Gon
  • Codeforces Round 1051 (Div. 2) A~D2
  • 国际服务器(VPS):泰国、印尼、菲律宾、马来西亚、香港、台湾、新加坡、日本、美国、英国等。
  • 缓存常见问题
  • ctfshow 电子取证
  • 插入排序与希尔排序 - 实践
  • IIS 部署 asp.net core 实用的方案时,出现500.19、500.31问题的解决方案
  • 嘉立创常用快捷键
  • 02020402 EF Core基础02-EF Core数据的增删改查
  • 图解支付系统账务系统核心设计 - 智慧园区
  • 解码C语言结构体
  • 软件工程学习日志2025.9.19
  • ECT-OS-JiuHuaShan 框架元推理,是人类良医与福音
  • upload-labs全通关
  • 操作系统,知识体系一共包含哪些部分? - 实践
  • vscode 下载 VS Code Server 卡住(无需手动下载)
  • 查询本地IPV6 地址
  • 实用指南:Android中handler机制
  • 缺失的第一个正数-leetcode
  • 实用指南:设计模式:建造者模式
  • 04_Redis凭啥这么牛:核心特性剖析
  • BGP路由属性与选路-1
  • 【CV】图像超分辨率的一些基础概念
  • Python面试题及详细答案150道(116-125) -- 性能优化与调试篇 - 实践