[eJOI 2024] 奶酪交易 / Cheese

news/2025/9/23 11:18:05/文章来源:https://www.cnblogs.com/huangweiliang/p/19106716

前言:

译者的语文成绩不怎么样啊。

解题思路:

假设农夫 \(i\) 所拥有的奶酪价值为 \(p_{i}\)

稍微细想一下 \(i\)\(j\) 交易这件事,因为钱的面值只有 \(2\) 的次幂,所以 \(j\)\(i\) 的钱的总面值一定是 \(B\) 的倍数,发现它实际上是想告诉我们:

\[p_{j}-p_{i}=A-k \times B \quad k \in \mathbb{Z} \]

\[p_{j}-p_{i} \equiv A \pmod{B} \]

在细想一下又能发现,我们不仅仅只知道 \(p_{j}-p_{i}\)\(B\) 的值,小于 \(B\) 的值我们也能知道。所以一次交易相当于告诉我们 \(p_{j}-p_{i}\) 模所有小于 \(B\) 的面值的差值。

注意到 \(B\) 的面值不会大于 \(2^{15}\),所以我们直接开 \(16\) 个带权并查集,第 \(i\) 个并查集中记录 \(fa_{x}\) 表示 \(x\) 的父亲,\(val_{x}\) 表示 \(p_{x}\) 在模 \(2^i\) 的意义下减 \(p_{fa_{x}}\) 的差值。

每次交易只要查询 \(i\)\(j\) 是否在并查集内是否有连边,差值是否正确即可。

\(x\) 所在的并查集和 \(y\) 所在的并查集合并的时候,我们知道的是 \(p_{x}\)\(p_{y}\) 之间的差 \(k\),那么这两个并查集的根节点之间的边权应为 \(k-val[x]+val[y]\)。(这部分请根据具体实现自行推断)

同时注意路径压缩时,\(x\) 的父节点变了,\(val_{x}\) 的值也要变。

\(B=-1\) 其实是容易的,只要将 \(B\) 当作一个足够大的值做就行了。

代码实现:

#include<bits/stdc++.h>
#define endl '\n'
#define LL long long
using namespace std;
const int N = 5e5 + 10;
int n, m;
struct DSU{int fa[N];LL val[N], mod;int find(int x){if(fa[x] == x) return x;int fat = find(fa[x]);val[x] = (val[x] + val[fa[x]]);return fa[x] = fat;}bool check(int x, int y, LL k){int fatx = find(x), faty = find(y);if(fatx != faty) return 1;return (((val[x] - val[y]) % mod + mod) % mod == k);}void merge(int x, int y, LL k){int fatx = find(x), faty = find(y);if(fatx == faty) return;fa[fatx] = faty;val[fatx] = k + val[y] - val[x];}
}T[17];
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> m;for(int j = 0; j <= 15; j++) T[j].mod = (1 << j);T[16].mod = 0x3f3f3f3f3f3f3f3f;for(int i = 1; i <= n; i++) for(int j = 0; j <= 16; j++) T[j].fa[i] = i;for(int i = 1; i <= m; i++){LL x, y, val, B;cin >> x >> y >> val >> B;if(B != -1){int k = log2(B);for(int i = k; i >= 0; i--) if(!T[i].check(x, y, val & (T[i].mod - 1))) goto failed;for(int i = k; i >= 0; i--) T[i].merge(x, y, val & (T[i].mod - 1));}else{int k = 15;if(!T[16].check(x, y, val)) goto failed;for(int i = k; i >= 0; i--) if(!T[i].check(x, y, val & (T[i].mod - 1))) goto failed;for(int i = k; i >= 0; i--) T[i].merge(x, y, val & (T[i].mod - 1));T[16].merge(x, y, val);}cout << 1 << endl; continue;failed: cout << 0 << endl;}return 0;
}

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

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

相关文章

逆向分析之switch语句

前言 本次我们要介绍的是C/C++中的switch语句在编译为可执行程序后的反汇编内容 一只 DEMO 首先我们需要先写一段示例代码,作为我们的分析对象 void switch_demo(int v) {switch(v){case 4:printf("v = 4\n"…

章丘建设局网站小广告怎么做

文章目录 前言一、动态合批的规则1、材质相同是合批的前提&#xff0c;但是如果是材质实例的话&#xff0c;则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader&#xff0c;来测试动态合批1、我们选择模型的 Mesh…

2008iis里没加域名 网站指向还在重庆物流公司网站建设

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。 安装环境&#xff1a;win 10 1、下载zip安装包&#xff1a; MySQL8.0 For Windows zip包下载地…

华北冶建工程建设有限公司网站平台公司信用评级

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用Float属性⭐ 使用Flexbox布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感…

手机网站建设专业服务公司微信公众平台官网手机版

来源&#xff1a;混沌巡洋舰原文&#xff1a;摘自 edge 系列图书 《那些最重要的科学新发现》迈克斯泰格马克(MaxTegmark)&#xff1a;麻省理工学院物理系终身教授&#xff0c;平行宇宙理论研究专家&#xff0c;未来生命研究所创始人&#xff1b;著有《生命3.0》《穿越平行宇宙…

营销网站htmlwordpress教程帕兰

JavaScript是一种广泛应用于Web开发的轻量级、解释型、面向对象的脚本语言&#xff0c;它支持事件驱动、函数式以及基于原型的编程风格。JavaScript不仅可以用于客户端&#xff08;在用户的浏览器中运行&#xff09;&#xff0c;也可以在服务端&#xff08;如Node.js环境&#…

推荐门户网站建设公司2个女人做暧暧网站

目录 一、效果图 二、qtDesigner ①拖出一个frame作为组容器并贴上背景样式 ②拖出主要的三个控件&#xff1a;frame、line、frame、label*2 ③固定大小并设置字体、布局一下 ④拷贝三份并水平布局一下 ⑤设置样式 ⑥调整布局 三、ui文件 四、代码 一、效果图 二、qtD…

批量查询设计桩号方法及文件格式

工具 → 设计标高 文件格式如下: HINTCAD5.84_STA_SHUJU47510.000 147520.000 247530.000 347540.000 447550.000 547560.000 647570.000 747580.000 847590.000 947600.000 10 【一定注意最后带个空行】,文件后缀名…

html5 响应式音乐网站网站推广软文选择天天软文

1.输入文件为基因组文件和gff3文件,输出为5utr和3utr,并且utr已经考虑了正负链和可变剪接情况,意思是如果utr存在可变剪接,输出的文件已经给拼接好了,并且考虑了正负链和拼接方向 #!/usr/bin/env python # -*- coding: utf-8 -*- # python lin_extract_5utr_cds_3utr2.py…

搭建Python的运行开发环境

在本次的学习中,我们将学习搭建python的编程环境,并将运行第一个python程序-在终端中打印输出 “Hello Python World!” Python是一种跨平台的编程语言,这就意味着它可以运行在所有主流的操作系统中。在所有安装pyt…

详细介绍:树上LCA和树链剖分(未完待续)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

上海网站建设置作山西响应式网站建设设计

一&#xff1a;前言 多线程在java中具有举足轻重的地位&#xff0c;无论是平时开发中还是面试求职中&#xff0c;对多线程这一块的知识点考察都非常多的&#xff0c;本周我们将平时开发中、面试中常见的一些多线程知识进行梳理&#xff0c;让大家对这一块有更加深入的理解 二…

【HBase 原理操作 01】

一、HBase依赖和整合的框架 依赖框架:Hadoop、Zookeeper 整合框架:Phoenix、Hive 二、HBase概念 1、定义:是以hdfs为数据存储的,一种分布式、可扩展的非关系型(NoSQL)数据库,和clickhouse一样同样以列式存储,存储…

打破数据壁垒,DMS Data Agent 开启智能分析之旅

DMS Data Agent 是阿里云推出的企业级智能分析平台,通过自然语言处理技术实现自动化数据分析。该方案突破传统分析流程,将复杂的数据探索简化为"一句话描述-获取深度分析"模式,显著提升决策效率。一、引言…

北京建设信源官方网站淄博营销网站建设公司

面向面试知识–MySQL数据库与索引 优化难点与面试点 什么是MySQL索引&#xff1f; 索引的MySQL官方定义&#xff1a;索引是帮助MySQL快速获取数据的数据结构。 动力节点原文&#xff1a; MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MysQL在存储数据之…

漳州网站建设去博大a优韩国建筑网站

目录 一、Tinymce介绍 二、React集成Tinymce 1、安装tinymce/tinymce-react组件 2、React中引用 三、如何配置中文语言包 1、下载中文包 2、把语言文件放入tinymce 3、tinymce配置项中配置语言 一、Tinymce介绍 官网&#xff1a;The Most Advanced WYSIWYG Editor | T…

南阳网站排名优化报价这几年做那个网站能致富

目录 11.2.4 方法 setUp() 注意 11.3 小结 第二部分 项目1 外星人入侵 第&#xff11;2 章 武装飞船 注意 12.1 规划项目 12.2 安装 Pygame 注意 12.2.1 使用 pip 安装 Python 包 注意 如果你启动终端会话时使用的是命令python3&#xff0c;那么在这里应使用命令…

网络技术网站专业网站开发平台

本文介绍go语言处理字符串类型的常见函数。 ## 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 () 。 str : This is a multiline string. ## 字符串的拼接 go // fmt.Sprintf方式拼接字符串 str1 : "abc" str2 : "def" …

建网站后如何维护如何优化公司的网站

复杂连接是指涉及多个表之间的连接操作&#xff0c;通过使用条件和连接类型来组合和关联这些表的数据。 一、常见的复杂连接类型及其特点、使用方法和示例代码&#xff1a; 1. INNER JOIN&#xff08;内连接&#xff09;&#xff1a; - 特点&#xff1a;返回两个表中满足连接…

广西建设工程质量监督网站青岛网站设计推广

dfddfdd 转载于:https://www.cnblogs.com/jiangfeilong/p/10432174.html