注意力惊人的注意到我们可以将问题转化为所有联通块大小全部为偶数。

假如已经确认了所有加入的边,那么我们可以通过类似 \(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 题解的更多相关文章

  1. CF603E Pastoral Oddities

    CF603E Pastoral Oddities 度数不好处理.转化题意:不存在连通块为奇数时候就成功了(自底向上调整法证明) 暴力:从小到大排序加入.并查集维护.全局变量记录奇数连通块的个数 答案单 ...

  2. CF603E Pastoral Oddities 优先队列+结论+LCT维护生成树

    首先,一个神奇的结论:一个合法的方案存在的条件是每一个联通块的节点数都是偶数个的. 这个可以用数学归纳法简单证一证. 证出这个后,我们只需动态加入每一个边,并查看一下有哪些边能够被删除(删掉后联通块依 ...

  3. 【CF603E】Pastoral Oddities cdq分治+并查集

    [CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...

  4. Codeforces603E - Pastoral Oddities

    Portal Description 初始时有\(n(n\leq10^5)\)个孤立的点,依次向图中加入\(m(m\leq3\times10^5)\)条带权无向边.使得图中每个点的度数均为奇数的边集是 ...

  5. Codeforces 603E Pastoral Oddities

    传送门:http://codeforces.com/problemset/problem/603/E [题目大意] 给出$n$个点,$m$个操作,每个操作加入一条$(u, v)$长度为$l$的边. 对 ...

  6. cf Round 603

    A.Alternative Thinking(思维) 给出一个01串,你可以取反其中一个连续子串,问取反后的01子串的最长非连续010101串的长度是多少. 我们随便翻一个连续子串,显然翻完之后,对于 ...

  7. usaco training 4.2.4 Cowcycles 题解

    Cowcycles题解 Originally by Don Gillies [International readers should note that some words are puns on ...

  8. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  9. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  10. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. 使用 yum 安装 nginx

    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ...

  2. java double转string去除科学计数法"E" 非tostring()和valueOf()

    在遇到需要将double类型转换string类型时,会出现转成科学计数法的形式,希望字符串能原样输出.直接使用会报java.lang.Double cannot be cast to java.lan ...

  3. Qt/C++编写视频监控系统81-Onvif报警抓图和录像并回放

    一.前言 视频监控系统中的图文警情模块,是通过Onvif协议的事件订阅拿到的,通过事件订阅后,设备的各种报警事件比如入侵报警/遮挡报警/越界报警/开关量报警等,触发后都会主动往订阅者发送,而且一般都是 ...

  4. 关于Qt国产化系统开发的几点总结

    随着国产化的兴起,各种国产系统和国产数据库等逐渐进入开发者的世界,科普几个要点. 中标麒麟neokylin基于fedora. 银河麒麟kylin早期版本比如V2基于freebsd,新版本V4.V10基 ...

  5. Pycharm IDE中导入和移除python项目

    1.Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: ...

  6. IM通讯协议专题学习(一):Protobuf从入门到精通,一篇就够!

    本文由IBM开发者社区分享,有较多修订和改动. 1.引言 在当今移动网络时代,手机流量和电量是宝贵的资源,对于移动端最常见的即时通讯IM应用,由于实时通信基于Socket长连接,它对于流量和电量的需求 ...

  7. V3Det&Bigdetection下载记录

    V3Det dataset https://opendatalab.com/V3Det BigDetection

  8. milvus操作

    java 引入依赖 <dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-j ...

  9. tomcat源码分析(一)如何启动服务

    从startup.sh入手 os400=false case "`uname`" in OS400*) os400=true;; esac PRG="$0" w ...

  10. 重温CSS

    入门 圆角 border-radius 阴影 box-shadow 元素边界 text-shadow 文字阴影 渐变 background-image属性新增的参数 linear-gradient 纵 ...