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

【学习笔记】CF603E Pastoral Oddities

先不考虑数据结构部分,尝试猜一下结论。

结论:一个连通块有解当且仅当连通块的度数为偶数。

然后这题要你最大边权最小。最无脑的方法就是直接上 lct \text{lct} lct真省事啊

我第一眼想到的还是整体二分。这玩意非常好写。

但是为什么也可以用线段树分治来做呢。这需要简单的分析一下性质。考虑求出每条边在哪些生成树上出现过,分析可知这一定是一段区间。

然后是非常玄学的操作。考虑离线,然后 倒着处理询问 (真是违背常理啊),这样的话一条边如果原来在生成树上,那么删去一条边后显然还是在生成树上(上面的分析告诉你的),这意味着恰好有一条边被加了进去,而这条边被加进去的条件就是连接的两个点不联通。

基于上述分析,我们可以尝试分治。首先,计算出影响区间的右端点在 [ m i d + 1 , r ] [mid+1,r] [mid+1,r]之间的边,那么我们就要先算出哪些边的影响区间 ≥ m i d + 1 \ge mid+1 mid+1,哪些边的影响区间 ≤ m i d \le mid mid,这样就将边集分成了两部分。使用可撤销并查集,然后往两边递归即可。怎么计算答案呢,发现递归到叶子节点的时候可以把那颗生成树算出来,然后就做完了。

事实上算边的影响区间部分我们可以不用真的将边分到两个集合中去。考虑更聪明的想法,倒着往前处理询问的时候,之前在生成树上的边还是在生成树上,那么我们事实上只需要在此基础上加入边权更大的边(当然这条边必须合法),直到得到的图满足条件。那么我们就知道新加入的这些边的影响区间的右端点就是当前这个位置,在线段树上对应部分打一个标记即可。这个半在线做法非常神奇。

这高级玩意估计考场上也想不到/kk

复杂度 O ( n log ⁡ n log ⁡ m ) O(n\log n\log m) O(nlognlogm)

实现了后一种较为复杂的方法。

该死,有一个地方打挂了。

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define inf 0x3f3f3f3f
#define db double
#define cpx complex<db>
using namespace std;
const int N=3e5+5;
int n,m,cnt,res[N],now;
int fa[N],s[N],sa[N];
vector<int>G[N<<2];
struct node{int x,y,z;
}e[N];
bool cmp(int x,int y){return e[x].z<e[y].z;
}
int find(int x){return fa[x]==x?x:find(fa[x]);
}
void modify(int p,int l,int r,int ql,int qr,int x){if(ql>qr)return;if(ql<=l&&r<=qr){G[p].pb(x);return;}int mid=l+r>>1;if(ql<=mid)modify(p<<1,l,mid,ql,qr,x);if(mid<qr)modify(p<<1|1,mid+1,r,ql,qr,x);
}
void solve(int p,int l,int r){vector<pair<int,int>>bak;for(auto pos:G[p]){int x=find(e[pos].x),y=find(e[pos].y);if(x!=y){cnt-=(s[x]&1)+(s[y]&1);if(s[x]>s[y])swap(x,y);bak.pb(make_pair(x,y));fa[x]=y,s[y]+=s[x],cnt+=(s[y]&1);}}if(l==r){while(cnt&&now<=m){int x=find(e[sa[now]].x),y=find(e[sa[now]].y);if(sa[now]<l)modify(1,1,m,sa[now],l-1,sa[now]);//fixedif(sa[now]<=l&&x!=y){cnt-=(s[x]&1)+(s[y]&1);if(s[x]>s[y])swap(x,y);bak.pb(make_pair(x,y));fa[x]=y,s[y]+=s[x],cnt+=(s[y]&1);}now++;}if(!cnt)res[l]=e[sa[now-1]].z;else res[l]=-1;}else{int mid=l+r>>1;solve(p<<1|1,mid+1,r);solve(p<<1,l,mid);}reverse(bak.begin(),bak.end());for(auto x:bak){cnt-=s[x.se]&1;fa[x.fi]=x.fi,s[x.se]-=s[x.fi];cnt+=(s[x.fi]&1)+(s[x.se]&1);}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++)fa[i]=i,s[i]=1;for(int i=1;i<=m;i++){cin>>e[i].x>>e[i].y>>e[i].z,sa[i]=i;}sort(sa+1,sa+1+m,cmp);cnt=n,now=1;solve(1,1,m);for(int i=1;i<=m;i++)cout<<res[i]<<"\n";
}

相关文章:

【学习笔记】CF603E Pastoral Oddities

先不考虑数据结构部分&#xff0c;尝试猜一下结论。 结论&#xff1a;一个连通块有解当且仅当连通块的度数为偶数。 然后这题要你最大边权最小。最无脑的方法就是直接上 lct \text{lct} lct。真省事啊 我第一眼想到的还是整体二分。这玩意非常好写。 但是为什么也可以用线段…...

如何使用ESP32-CAM构建一个人脸识别系统

有许多人识别系统使用签名、指纹、语音、手部几何、人脸识别等来识别人&#xff0c;但除了人脸识别系统。 人脸识别系统不仅可以用于安全目的来识别公共场所的人员&#xff0c;还可以用于办公室和学校的考勤目的。 在这个项目中&#xff0c;我们将使用 ESP32-CAM 构建一个人脸识…...

JavaWeb分页条件查询参数特殊字符处理

问题背景 在项目开发过程中&#xff0c;基本都会有列表条件查询&#xff0c;例如用户管理会有通过用户姓名模糊查询用户&#xff0c;课程管理会有课程名称模糊查询课程等等。 而查询过程中如果用户在界面上输入一些特殊字符&#xff0c;例如&#xff1a;%_等等&#xff0c;这…...

ubuntu18服务安装

一、JDK安装 将jdk解压缩到该目录 /opt/ sudo tar -zxvf jdk-8u261-linux-x64.tar.gz -C /opt/ #重命名 cd /opt sudo mv jdk-8u261-linux-x64 jdk_8 修改环境变量 sudo vi ~/.bashrc #在文件最后追加以下文本 #进入编辑器后输入以下指令&#xff1a; #1. G //将光标移到最后一…...

这些使用工具大推荐,现在知道不晚

1.Snip Snip是一款截图软件&#xff0c;它突出的优点就是可以制作滚动截图。 例如&#xff1a;对整个网页进行截图&#xff0c;使用Snip即可轻松获取&#xff0c;无需处理水印。 2.Sleep Cycle 快节奏、高压力的生活导致我们越来越晚睡觉&#xff0c;睡眠质量越来越差。 想提…...

【Java|golang】1048. 最长字符串链

给出一个单词数组 words &#xff0c;其中每个单词都由小写英文字母组成。 如果我们可以 不改变其他字符的顺序 &#xff0c;在 wordA 的任何地方添加 恰好一个 字母使其变成 wordB &#xff0c;那么我们认为 wordA 是 wordB 的 前身 。 例如&#xff0c;“abc” 是 “abac”…...

Hive基础和使用详解

文章目录 一、启动hive1. hive启动的前置条件2. 启动方式一: hive命令3. 方式二:使用jdbc连接hive 二、Hive常用交互命令1. hive -help 命令2. hive -e 命令3. hive -f 命令4. 退出hive窗口5. 在hive窗口中执行dfs -ls /&#xff1b; 三、Hive语法1.DDL语句1.1 创建数据库1.2 两…...

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

c/c&#xff1a;栈帧&#xff0c;传值&#xff0c;传址&#xff0c;实参传值给形参&#xff0c;传地址指针给形参 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所知道的周边的会c的同学&…...

玩元宇宙血亏后 蓝色光标梭哈AI也挺悬

蓝色光标2022年年度报告出炉&#xff0c;巨亏21.75 亿元&#xff0c;其中20.38亿亏损因商誉、无形资产及其他资产减值造成&#xff0c;而在实际亏损业务中&#xff0c;元宇宙占比不小。 蓝色光标在元宇宙领域的布局&#xff0c;主要通过三家子公司实施&#xff0c;分别为蓝色宇…...

生物---英文

标题 前言必学场景词汇及用法鸟类昆虫类哺乳类爬行类情境常用单词鸟类虫类哺乳类两栖类与爬行类分类与动物相关的习语前言 加油 必学场景词汇及用法 鸟类 1bird [b[插图]d] n.鸟bird’s-eye-view[ˈb[插图]dzaɪˌvju]adj.鸟瞰图的a bird’s-eye view鸟瞰a flock of bird…...

ENVI 国产高分2号(GF-2)卫星数据辐射定标 大气校正 影像融合

1.数据 高分2号卫星数据&#xff0c;包含&#xff1a; MSS-1\2多光谱数据&#xff0c;4m分辨率&#xff1b; Pan-1\2全色波段数据&#xff0c;0.8m分辨率。 2.处理软件 ENVI5.3 国产插件下载地址&#xff1a;ENVI App Store (geoscene.cn) 首先下载插件文件&#xff1b; …...

操作系统考试复习——第二章 进程控制 同步与互斥

进程控制一般是由OS中的原语来实现的。 大多数OS内核都包含了两大方面的功能&#xff1a; 1.支撑功能&#xff1a;1)中断处理 2)时钟管理 3)原语操作(原语操作就是原子操作。所谓原子操作就是一个操作中所有动作要不全做要不全不做) 2.资源管理功能&#xff1a;1)进程管理…...

mac gitstats查看git提交记录

一、介绍&#xff1a; 进一步来讲&#xff0c;Gitstats它是一个git仓库分析软件&#xff0c;它可以检查仓库并生成历史数据的统计信息。可以帮助你查看git仓库的提交状态&#xff0c;根据不同维度分析计算&#xff0c;并自动生成数据图表。 官网介绍&#xff1a;http://gitst…...

电脑系统错误怎么办?您可以看看这5个方法!

案例&#xff1a;电脑出现系统错误该如何解决&#xff1f; 【这几天长时间使用我的电脑&#xff0c;导致它的系统出现了错误。有没有小伙伴知道如何解决电脑系统出错的问题&#xff1f;求一个能快速解决的方法。】 电脑系统出现错误是使用电脑时难免会遇到的问题之一&#xf…...

九款顶级AI工具推荐

ChatGPT OpenAI开发的最强对话系统 地址&#xff1a;chat.openai.com ChatGPT能够在同一个会话期间内回答上下文相关的后续问题。其在短时间内引爆全球的原因在于&#xff0c;在网友们晒出的截图中&#xff0c;ChatGPT不仅能流畅地与用户对话&#xff0c;甚至能写诗、撰文、编…...

StringRedisTemplate-基本使用

StringRedisTemplate继承自RedisTemplate,在这里说明一下&#xff0c;当我们使用RedisTemplate往redis中存储java对象的时候&#xff0c;他会顺带着将该java对象的字节码文件也同时存进了内存中&#xff0c;这是为了实现自动反序列化Autowired private StringRedisTemplate red…...

ansible自动运维——ansible使用临时命令通过模块来执行任务

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…...

python 之数据类型(四)

1、字符串&#xff08;String&#xff09; 使用双引号或者单引号中的数据&#xff0c;就是字符串 注&#xff1a;python中使用三引号时允许一个字符串跨多行&#xff0c;字符串中可以包含换行符、制表符以及其它特殊符号 a a c g print(a)运行结果&#xff1a; a c g1、下标 …...

洛谷P1345 无向图最小割点数

题意&#xff1a; 给出一副有 n n n个点&#xff0c; m m m条边的无向图&#xff0c;求出这副图的最小割点数 题意&#xff1a; 首先对于有向图&#xff0c;求他的最小割边&#xff0c;只需要令每条边的容量为 1 1 1&#xff0c;求出起点到终点的最大流就是最小割边数了。 容…...

适合程序员阅读的有用书籍:

几本适合程序员阅读的有用书籍&#xff1a; 1.《计算机程序设计艺术》(The Art of Computer Programming)是由Donald E. Knuth撰写的一系列著作&#xff0c;是计算机科学领域的经典之作。该系列著作共分为三卷&#xff0c;分别介绍了算法和计算机程序设计的基础知识和技巧。 …...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...