2022 ICPC Hangzhou G and 2022 ICPC Jinan

news/2025/10/20 22:55:00/文章来源:https://www.cnblogs.com/Young-Cloud/p/19153859

2022 ICPC Hangzhou G and 2022 ICPC Jinan

ICPC Hangzhou

G

手玩可以发现合法的图中最多只有一个环。所以对于 \(m = n - 1\) 的情况直接判合法;对于 \(m > n\) 的情况直接判非法,此时图中肯定不知有一个环;需要考虑 \(m = n\) 即图是基环树的情况。

当图是基环树时,得到该图的一个生成树也就是断开一条环上的边,也就是说断开的每条边都要是等价的,这就要求这个图有对称性。假设以环上的第 \(i\) 个点为根的子树是 \(t_i\)\(t_i = t_j\) 表示两颗子树同构,则任意 \(t_i = t_j\) 时,基环树上的任意一颗子树都同构,是可以的。还有一种情况是两种形态的树在基环树上交替出现,此时一定是偶环。

判断同构用树哈希:

using i64 = long long;
using u64 = unsigned long long;
// using i128 = __int128_t;
// using point = std::array<i128, 2>;constexpr i64 Mod = 998244353;
constexpr int N = 1e5, P = 10;
const u64 Mask = std::mt19937_64(time(nullptr))();;std::vector<int> adj[N + 5];
int deg[N + 5];
bool cir[N + 5];
u64 val[N + 5];void init(int n) {for (int i = 1; i <= n; ++i) {adj[i].clear();deg[i] = 0;cir[i] = false;}
}// 树哈希
u64 shift(u64 x) {x ^= Mask;x ^= x << 13;x ^= x >> 7;x ^= x << 17;x ^= Mask;return x;
}
u64 dfs(int cur, int lst) {val[cur] = 1ull;for (auto &to : adj[cur]) {if (to != lst && !cir[to]) {val[cur] += shift(dfs(to, cur));}}return val[cur];
}bool solve() {int n = 0, m = 0;std::cin >> n >> m;init(n);for (int i = 0; i < m; ++i) {int u = 0, v = 0;std::cin >> u >> v;adj[u].push_back(v);adj[v].push_back(u);deg[u] += 1;deg[v] += 1;}if (m == n - 1) {return true;}if (m > n) {return false;}// 找环std::queue<int> q;for (int i = 1; i <= n; ++i) {if (deg[i] == 1) {q.push(i);}}while (not q.empty()) {auto cur = q.front();q.pop();for (auto &to : adj[cur]) {if (deg[to] == 0) {continue;}deg[cur] -= 1;deg[to] -= 1;if (deg[to] == 1) {q.push(to);}}}for (int i = 1; i <= n; ++i) {if (deg[i] >= 2) {cir[i] = true;}}std::vector<int> node;for (int i = 1; i <= n; ++i) {if (!cir[i]) {continue;}int cur = i, lst = 0;do{node.push_back(cur);for (auto &to : adj[cur]) {if (cir[to] && to != lst) {lst = cur;cur = to;break;}}} while (cur != i);break;}// 奇环if (node.size() % 2) {auto p = dfs(node[0], 0);for (int i = 1; i < node.size(); ++i) {if (dfs(node[i], 0) != p) {return false;}}}// 偶环else {std::array<u64, 2> p = { dfs(node[0], 0), dfs(node[1], 0) };for (int i = 2; i < node.size(); ++i) {if (dfs(node[i], 0) != p[i & 1]) {return false;}}}return true;
}

ICPC Jinan

A

先用操作 3 一定是不劣的,用完操作 3 后,问题就变成了将一个序列里的数通过加减调整成全部一样,同时你可以删掉 \(m\) 个数,当知道要变成什么数时,也就知道了该删掉那 \(m\) 个数,即操作次数最多的那些数。

可能的目标值是不多的,大约只有 \(N\times log_2(10^9)\)(即每个数一直除 2 直到 1 为止),于是我们就可以先预处理出序列里的数到所有可能值得操作数,再枚举最后可能的值,优先队列选出操作数少的 \(n - m\) 个就好了

constexpr int N = 500, L = 40;int n, m;
int a[N + 5];
std::vector<int> s;i64 d[N + 5][N * L];i64 cnt(int j) {i64 ret = 0;std::priority_queue<i64> q;for (int i = 1; i <= n; ++i) {if (q.size() < m) {q.push(d[i][j]);ret += d[i][j];}else if (q.top() > d[i][j]) {ret -= q.top();q.pop();q.push(d[i][j]);ret += d[i][j];} }return ret;
}bool solve() {std::cin >> n >> m;s.clear();m = n - m;for (int i = 1; i <= n; ++i) {std::cin >> a[i];int cur = a[i];while (cur != 0) {s.push_back(cur);cur /= 2;}}// 预处理操作数std::sort(s.begin(), s.end(), std::greater<int>());s.erase(std::unique(s.begin(), s.end()), s.end());for (int i = 1; i <= n; ++i) {int cnt = 0;for (int j = 0; j < s.size(); ++j) {while (a[i] / 2 > s[j]) {a[i] /= 2;cnt += 1;}d[i][j] = cnt + std::abs(a[i] - s[j]);if (a[i] > 1) {d[i][j] = std::min(d[i][j], 1ll * (cnt + 1 + s[j] - a[i] / 2));}}}i64 ans = Inf;for (int i = 0; i < s.size(); ++i) {ans = std::min(ans, cnt(i));}std::cout << ans << '\n';return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++在类定义内的函数包含static代表什么含义呢?

在类定义内的函数包含static代表什么含义呢? 在类定义内使用 static 关键字修饰成员函数有特殊的含义,它表示这是一个静态成员函数。 静态成员函数的特点 1. 不依赖于类的实例class MyClass { public:static void st…

2025/10/20~2025/?/? 做题笔记 - sb

2025/10/20 AT_arc181_d Prefix Bubble Sort 很显然的有每一次交换都会恰好减少一个逆序对,于是题目转化为每次会产生多少次交换。 那么考虑如何统计交换次数发现当前缀 max 变化时不会产生答案,但是这个折线非常困难…

10-20 Extra-Problem 总结

10-20 Extra-Problem 总结 AtCoder abc280_g 发现点 \((x,y)\) 的距离实际上是 \(\max(|x|,|y|,|x-y|)\)。由于坐标是可平移的,所以 \((x_1,y_1),(x_2,y_2)\) 的距离为 \(\max(|x_1-x_2|,|y_1-y_2|,|(x_1-x_2)-(y_1-y…

Rust 编译加速的最佳实践

Rust 编译慢是“老毛病”,但 2024-2025 年官方和社区集中发力,已经把“等 10 min”级别的大型项目干到了“秒级增量”。下面把当前(2025-10)验证有效的加速手段按“投入-收益”从高到低排序,全部可立刻落地;最后…

ansible底层文件传输机制中默认模式遇到权限拒绝后启用管道模式可以得到解决

为啥我在ansible.cf中加入这一配置后就可以ping通了 [ssh_connection] pipelining = True[student@master ansible]$ ansible all -m ping [WARNING]: sftp transfer mechanism failed on [node2]. Use ANSIBLE_DEBUG…

20232304 2025-2026-1 《网络与系统攻防技术》实验三实验报告

20232304 2025-2026-1 《网络与系统攻防技术》实验三实验报告 1.实验内容 1.1 实验内容 (1)使用msf编码器以及多种格式Payload生成,veil的evasion功能,利用C+Shellcode编程等技巧 (2)通过组合应用各种技术实现恶意代…

10月20日记

1.今天学习java 2.明天学习工程技艺 3.递归的终止条件怎么确定?会不会栈溢出?

笔记本 光驱 的内部结构及用法: 应急强大的系统启动 (恢复) 光盘 (DVD+R/RW)

笔记本 光驱 的内部结构及用法: 应急强大的系统启动 (恢复) 光盘 (DVD+R/RW)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

20251020周一日记

20251020周一日记为什么上周五没写日记?因为在集中办公耶! 周五: 1.早上开项目启动大会,一群老总来,有点像誓师大会。开始干活,第一天还没啥人吃零食。 2.下午上课,本来说是要汇报?结果老师微笑着走了忘了这事…

WPF loading data asynchronously and contextmenu save as json in mvvm

Install-Package Prism.Wpf; Install-Package Prism.DryIOC; Install-Package System.Text.Json;<prism:PrismApplication x:Class="WpfApp36.App"xmlns="http://schemas.microsoft.com/winfx/2006/…

Android 源码解析系列1- Android init 进程启动流程

Android 源码解析系列1- Android init 进程启动流程Android 源码解析系列1- Android init 进程启动流程 init进程是用户空间的第一个进程.如下 g1930fua_g210_ai:/ $ ps -ef | grep init #uid pid ppid C…

英语_阅读_Start school_待读

When children start school for the first time, parents often feel a sense of excitement coupled with a touch of sadness at the end of an era. This is the start of a new adventure for children playing a…

2025.10.20总结

今天继续学软考相关内容,目前过完操作系统剩下的相关知识 上午上课的时候进行项目演示有很多的收获,与它们的项目相比我目前的开发而言还存在很多的不足 操作系统作为系统资源的管理者,当然也需要对内存进行管理,要…

10.20总结

class Mammal{} class Dog extends Mammal {} class Cat extends Mammal{} public class TestCast { public static void main(String args[]) { Mammal m; Dog d=new Dog(); Cat c=new Cat(); m=d; //d=m; d=(Dog)m; …

学习相关

博客园主题设置 参考 一个是这个博主的,设置的比较精美:https://www.cnblogs.com/huxingxin/p/16886323.html 还有就是这个博主:https://www.cnblogs.com/zhaohongbing/p/16332606.html 其实自己也想照着这个博主的…

题解:Luogu P2075 区间 LIS

题意 给定长度为 \(n\) 的排列 \(p\),\(q\) 次询问 \(l,r\),求 \(p[l,r]\) 的 LIS 长度。\(1\leq n,q\leq 10^5\)。 题解 挺牛的题。 考虑如何刻画 LIS。感觉上 DP 没有什么前途,考虑另一种经典的 \(\mathcal{O}(n\…

英语_阅读_2050 Space tourism_待读

It is 2050. Space tourism has become a reality. 现在是2050年。太空旅游已经成为现实。 So would you want to be a space tourist? 那么你想成为一名太空游客吗? Here, some middle school students share their…

题解:Luogu P10644 [NordicOI 2022] 能源网格 Power Grid

题意 给定 \(n,m\)。对于 \(n\times m\) 的网格 \(a\),定义 \[c_{i,j}=\left\lvert \sum_{k=1}^{n}a_{k,j}-\sum_{k=1}^{m}a_{i,k} \right\rvert \]现在给定 \(c\),构造一组合法的 \(a\)。数据保证有解。\(1\leq n,m…

题解:Luogu P10004 [集训队互测 2023] Permutation Counting 2

题意 给定 \(n\),对于所有 \(0\leq x,y<n\) 求有多少长度为 \(n\) 的排列 \(p\) 满足 \(\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]=x\) 且 \(\sum\limits_{i=1}^{n-1}[p^{-1}_i<p^{-1}_{i+1}]=y\),答案对给定的…