[CF603E] Pastoral Oddities 题解
注意力惊人的注意到我们可以将问题转化为所有联通块大小全部为偶数。
假如已经确认了所有加入的边,那么我们可以通过类似 \(K\) 算法的方式求解。
考虑到答案单调不升,所以每条边都有一个影响的区间。考虑线段树分治。
我们倒序枚举,遇到要加入的边,若当前时间为 \(t\),边的加入时间为 \(t'\),则我们让 \([t',t)\) 这一段区间都连这条边。由于答案单调不升(倒序就是单调不减),所以可以用类似双指针的思路将枚举加边的时间复杂度降到 \(O(m)\)。之后就是经典线段树分治了。
时间复杂度 \(O(n\log n\log m)\)。
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,m,k,fa[N],sz[N],ans[N];
struct mer{
int sz,x,y,dod;
};stack<mer>st;
struct ed{
int x,y,v,id;
}e[N];int ps,od;
vector<ed>g[4*N];
int cmp(ed x,ed y){
return x.v<y.v;
}inline void init(){
for(int i=1;i<=n;i++)
fa[i]=i,sz[i]=1;
}inline int find(int x){
return fa[x]==x?x:find(fa[x]);
}inline void unite(int x,int y){
x=find(x),y=find(y);
if(x==y) return;int fl=0;
if(sz[x]<sz[y]) swap(x,y);
if(sz[x]%2&&sz[y]%2) fl=2;
st.push({sz[x],x,y,fl});
fa[y]=x,sz[x]+=sz[y],od-=fl;
}inline void chg(int x,int l,int r,int L,int R,ed e){
if(L>R) return;
if(L<=l&&r<=R){
g[x].push_back(e);
return;
}int mid=(l+r)/2;
if(L<=mid) chg(x*2,l,mid,L,R,e);
if(R>mid) chg(x*2+1,mid+1,r,L,R,e);
}inline void solve(int x,int l,int r){
int ltp=st.size();
for(auto eg:g[x]) unite(eg.x,eg.y);
int mid=(l+r)/2;
if(l==r){
while(od&&ps<m){
if(e[ps+1].id<=l){
unite(e[ps+1].x,e[ps+1].y);
chg(1,1,m,e[ps+1].id,l-1,e[ps+1]);
}ps++;
}ans[l]=(!od?e[ps].v:-1);
}else solve(x*2+1,mid+1,r),solve(x*2,l,mid);
while(st.size()>ltp){
mer x=st.top();st.pop();
fa[x.y]=x.y,sz[x.x]=x.sz,od+=x.dod;
}
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m,od=n,init();
for(int i=1;i<=m;i++)
cin>>e[i].x>>e[i].y>>e[i].v,e[i].id=i;
sort(e+1,e+m+1,cmp),solve(1,1,m);
for(int i=1;i<=m;i++) cout<<ans[i]<<"\n";
return 0;
}
[CF603E] Pastoral Oddities 题解的更多相关文章
- CF603E Pastoral Oddities
CF603E Pastoral Oddities 度数不好处理.转化题意:不存在连通块为奇数时候就成功了(自底向上调整法证明) 暴力:从小到大排序加入.并查集维护.全局变量记录奇数连通块的个数 答案单 ...
- CF603E Pastoral Oddities 优先队列+结论+LCT维护生成树
首先,一个神奇的结论:一个合法的方案存在的条件是每一个联通块的节点数都是偶数个的. 这个可以用数学归纳法简单证一证. 证出这个后,我们只需动态加入每一个边,并查看一下有哪些边能够被删除(删掉后联通块依 ...
- 【CF603E】Pastoral Oddities cdq分治+并查集
[CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...
- Codeforces603E - Pastoral Oddities
Portal Description 初始时有\(n(n\leq10^5)\)个孤立的点,依次向图中加入\(m(m\leq3\times10^5)\)条带权无向边.使得图中每个点的度数均为奇数的边集是 ...
- Codeforces 603E Pastoral Oddities
传送门:http://codeforces.com/problemset/problem/603/E [题目大意] 给出$n$个点,$m$个操作,每个操作加入一条$(u, v)$长度为$l$的边. 对 ...
- cf Round 603
A.Alternative Thinking(思维) 给出一个01串,你可以取反其中一个连续子串,问取反后的01子串的最长非连续010101串的长度是多少. 我们随便翻一个连续子串,显然翻完之后,对于 ...
- usaco training 4.2.4 Cowcycles 题解
Cowcycles题解 Originally by Don Gillies [International readers should note that some words are puns on ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- Spring框架IoC核心详解
介绍 IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现.IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,由S ...
- RepoDB:一个介于Dapper、EFCore之间.Net的ORM库
推荐一个介轻量ORM和全功能ORM的开源项目. 01 项目简介 RepoDB 提供了基本操作所需的方法,同时也提供了一些高级功能,如第二层缓存.跟踪.仓储.属性处理器和批量/大量操作.支持的数据库,包 ...
- P6474 [NOI Online #2 入门组] 荆轲刺秦王 题解
荆轲将会臭名昭著 首先 $15$ 做法很简单,那就是直接 `cout<<-1` 考虑用 BFS 来解思路很简单,但是怎么求每个士兵的控制范围呢? 直接暴力时间复杂度是 $O(nma^2)$ ...
- Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示
Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示 本文将介绍如何在本地部署Llama 3.2 90B(900亿参数)视觉多模态大模型,并开发一些Use Case,展示其强大的视觉理解 ...
- mybatis-plus逻辑删除不生效的解决办法
我们在使用mybatis-plus时,一般设备逻辑删除是非常简单的,基本上在yaml等配置文件中做一下配置.然后在字段上注解@TableLogic就可以了.有不清楚的,可以参考https://www. ...
- re模块:核心函数和方法
1.compile(pattren,flages=0) 使用任何可选的标记来编译正则表达式的模式然后返回一个正则表达式对象 2.match(pattern,string,flags=0) 尝 ...
- Qt/C++编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)
一.功能特点 1.1 文件推流 指定网卡和监听端口,接收网络请求推送音视频等各种文件. 实时统计显示每个文件对应的访问数量.总访问数量.不同IP地址访问数量. 可指定多种模式,0-直接播放.1-下载播 ...
- Qt编写物联网管理平台43-告警短信转发
一.前言 系统在运行过程中,会实时采集设备的数据,当采集到的数据发生报警后,可以将报警信息以短信的形式发送给指定的管理员(可以是多个),这样管理员就算不在现场,也能第一时间知道哪里发生了报警,可以紧急 ...
- 最近很新的EasyJailbreak😝 A Unified Framework for Jailbreaking Large Language Models🔅
整篇文章短小精悍,原文中的链接很有意思~大家去多多尝试哦!
- Android Studio4.1.2中,修改了gradle后,如何在不关闭AS IDE的情况下使gradle进行sync
Android Studio4.1.2中,修改了gradle后,如何在不关闭AS IDE的情况下使gradle进行sync: 方法1: 修改了gradle后,上面自然就弹出了一个提示框 你点击上面的S ...