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

【CF603E】Pastoral Oddities

题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数。如果有,输出这个生成子图中边权最大的边的权值最小可能是多少。

$n\le 10^5,m\le 10^6,l_i\le 10^9$

题解:可以证明如果存在一个生成子图满足所有点度数都是奇数,当且仅当所有连通块都有偶数个点。并且可以知道加边一定不会使答案更劣。正解有三种:1.LCT维护最小生成树;2.cdq分治(类似整体二分);3.线段树(类似按时间分治)。都比较神,本人采用了第二种。

官方题解:http://codeforces.com/blog/entry/21914

大神的第二种做法的题解:https://www.cnblogs.com/galaxies/p/cf603E.html

 

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=100010;
const int maxm=300010;
int f[maxn],g[maxn],siz[maxn],st[maxn],ans[maxm];
int n,m,cnt,top;
struct edge
{int a,b,c,tim;
}p[maxm],q[maxm];
bool cmp(const edge &a,const edge &b)
{return (a.c==b.c)?(a.tim<b.tim):(a.c<b.c);
}
inline void uni(int a,int b)
{int x=a,y=b,c=0,d=0;while(f[x]!=x)	x=f[x],c++;while(f[y]!=y)	y=f[y],d++;if(x==y)	return ;if(c>d)	swap(x,y),swap(a,b);cnt-=(siz[x]&1)+(siz[y]&1)-((siz[x]+siz[y])&1);siz[y]+=siz[x],f[x]=y;st[++top]=x;
}
inline void del(int x)
{int y=f[x];siz[y]-=siz[x],f[x]=x;cnt+=(siz[x]&1)+(siz[y]&1)-((siz[x]+siz[y])&1);
}
void solve(int l,int r,int L,int R)
{if(l>r)	return ;int mid=(l+r)>>1,i,now=top,MID;for(i=l;i<=mid;i++)	if(p[i].c<=L)	uni(p[i].a,p[i].b);for(i=L;i<=R&&cnt;i++)	if(q[i].tim<=mid)	uni(q[i].a,q[i].b);MID=max(L,i-1);if(!cnt)	ans[p[mid].tim]=q[MID].c;else	ans[p[mid].tim]=-1;while(top>now)	del(st[top--]);for(i=L;i<=MID;i++)	if(q[i].tim<=l)	uni(q[i].a,q[i].b);solve(l,mid-1,MID,R);while(top>now)	del(st[top--]);for(i=l;i<=mid;i++)	if(p[i].c<=L)	uni(p[i].a,p[i].b);solve(mid+1,r,L,MID);while(top>now)	del(st[top--]);
}
inline int rd()
{int ret=0,f=1;	char gc=getchar();while(gc<'0'||gc>'9')	{if(gc=='-')	f=-f;	gc=getchar();}while(gc>='0'&&gc<='9')	ret=ret*10+(gc^'0'),gc=getchar();return ret*f;
}
int main()
{n=rd(),m=rd();int i;for(i=1;i<=m;i++)	p[i].a=rd(),p[i].b=rd(),p[i].c=rd(),p[i].tim=i,q[i]=p[i];sort(q+1,q+m+1,cmp);for(i=1;i<=n;i++)	f[i]=i,siz[i]=1;for(i=1;i<=m;i++)	p[q[i].tim].c=i;cnt=n;solve(1,m,1,m);for(i=1;i<=m;i++)	printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/8595001.html

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

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

相关文章

关于C/C++中函数参数传递的规则

f&#xff08;A,B,C&#xff09;&#xff1b; 在编译程序中&#xff0c;对函数参数传递的处理是由右向左进行的。 因此&#xff0c;先传递的是最右边的参数的值。这个结论在日常使用的时候其实也很难发现有什么具体的区别&#xff0c;但是在编译原理中或者一些偏向于理论的考试…

sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)

SQL Server遍历表一般都要用到游标&#xff0c;SQL Server中可以很容易的用游标实现循环&#xff0c;实现SQL Server遍历表中记录。本文将介绍利用使用表变量和游标实现数据库中表的遍历。表变量来实现表的遍历以下代码中&#xff0c;代码块之间的差异已经用灰色的背景标记。DE…

SQL的主键和外键

SQL的主键和外键的作用 SQL的主键和外键的作用&#xff1a; 外键取值规则&#xff1a;空值或参照的主键值。 (1)插入非空值时&#xff0c;如果主键表中没有这个值&#xff0c;则不能插入。 (2)更新时&#xff0c;不能改为主键表中没有的值。 (3)删除主键表记录时&#xff0c;你…

win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)

本来没有打算写这一篇解决帖子的&#xff0c;但是最近好多微博的友友都在私我询问解决方法&#xff0c;孩子虽然很热心&#xff0c;但是真的回复不过来了&#xff0c;打字太累了&#xff0c;这里给大家简单指个路&#xff0c;希望能够对大家有所帮助。 当时出现这个问题的时候…

java类验证和装载顺序_java中类的加载顺序介绍(ClassLoader)

转自&#xff1a;http://blog.csdn.net/eff666/article/details/522034061、ClassNotFoundExcetpion我们在开发中&#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常&#xff0c;今天我就来总结一下这个问题。对于这个异常&#xff0c;它实质涉及到了java技术体…

[转]ASP.NET MVC4中@model使用多个类型实例的方法

本文转自&#xff1a;http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的model中使用多个类型的实例&#xff0c;.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求。 假设Person和Product是两个类型&#xff0c;如下是控制…

软件测试之黑盒测试-边界值分析法(理论白话学习/期中期末备考)

这里简单进行一下知识体系的梳理。 文章目录前言一、边界值分析是什么&#xff1f;二、因果图1.分析规格说明中给出的原因&#xff0c;结果和是否可能存在中间态。2.标约束&#xff0c;画图三、画判定表并画出对应的测试用例表。总结前言 主要从三个方面谈一下简单应用 边界值…

window下搭建Python3.7+selenium3.1.1+pycharm环境

1.安装Python3.7 1.1 下载 Python并安装 Python3.5 &#xff08;勾选上 Add Python3.7 to PATH&#xff09; 点击 Install Now&#xff0c;安装完成后将python路径加入环境变量Path 如D:\python35\Python35;D:\python35\Python35\Scripts; 1.2 安装完成之后&#xff0c;winr…

软件测试之单元测试之Junit测试使用前准备

Junit测试只能说是算的上软件测试这门课中首次出现需要实操进行测试的工具了。 可以理解为前面的黑盒测试&#xff0c;白盒测试是为了理解一种测试思想&#xff0c;根据测试思想能够进行设计测试样例&#xff0c;到了Junit单元测试这里&#xff0c;就成了利用工具进行具体的测…

解释为脑瘫的那张图_Python GIL全局解释器锁详解(深度剖析)

通过前面的学习&#xff0c;我们了解了 Pyton 并发编程的特性以及什么是多线程编程。其实除此之外&#xff0c;Python 多线程还有一个很重要的知识点&#xff0c;就是本节要讲的 GIL。GIL&#xff0c;中文译为全局解释器锁。在讲解 GIL 之前&#xff0c;首先通过一个例子来直观…

SPOJ3276 D-query

题意&#xff1a;n个数 a1...an&#xff0c;q组询问&#xff0c;每组询问给定 l&#xff0c;r&#xff0c;输出 [ l, r ] 有多少不同的数 ( n ≤30000, q ≤200000, ai ≤ 106 ) 离线 树状数组维护 1 #include<bits/stdc.h>2 3 using namespace std;4 5 const int MAXN…

关于string型的处理——pta L1常用

1.关于带空格字符串函数的输入 a.getline(cin,str); b.getline(cin,str,c);(c为字符。) #include<bits/stdc.h> using namespace std; int main() {string str1,str2;getline(cin,str1); //输入带空格的字符串&#xff0c;当输入空格的时候终止 getline(cin…

电路板上的插头怎么拔下来_空调维修排查电路板内外原因

点击链接&#xff1a;空调变频板维修在线课程来了空调维修资料库重大更新&#xff0c;正在上传中&#xff0c;点击马上拥有排查电路板内外原因熟悉电路结构&#xff0c;先分清控制板的内外电路&#xff0c;外部检测、外部控制等&#xff0c;分清故障产生是内因还是外因——确定…

Loj #6307. 「雅礼国庆 2017 Day1」Clique

link: https://loj.ac/problem/6307 最大团转补图的独立集&#xff0c;这样的话只有r[x]<l[y]或者r[y]<l[x]&#xff0c;x和y才能连边&#xff0c;所以排序之后乱搞就行了。 需要注意的一点是&#xff0c;如果一个点的lr的话&#xff0c;需要特殊建点。 #include<bits…

linux 拼音输出繁体_ubuntu输入法是繁体 寻找Ubuntu中繁体字输入法 - Linux - 服务器之家...

ubuntu输入法是繁体 寻找Ubuntu中繁体字输入法发布时间&#xff1a;2017-05-10来源&#xff1a;服务器之家当客户来自港台地区时&#xff0c;英文和繁体字就成了交流的主要工具。windows下我们有搜狗输入法可以切换简体与繁体&#xff0c;那么Ubuntu下怎么办&#xff1f;這是我…

在比赛中一些对数和数组的操作的应用(持续更新)

1.整形数组的排序-sort函数&#xff08;在比赛中如果比赛不卡时间的话可以节省不少时间&#xff09; sort(na,nb);(n为你想要进行排序的整形数组)&#xff1b; #include<bits/stdc.h> using namespace std; int main() {int num[10]{1,23,232,213,112,123,342,42,121,12…

软件测试知识体系结构整理(一)(个人为备战期中期末理论考试所总结,如需要系统学习关于软件测试的知识,请参考其他博主)

系列文章目录 第一章 软件测试基本概念 文章目录系列文章目录一、软件测试基本概念1.软件缺陷2.软件缺陷类型3.软件缺陷等级4.关于对软件测试的一般误区5.软件测试环境二、白盒测试1.白盒测试的概念与优缺点理解2.逻辑测试3.基本路径测试三.黑盒测试1.等价类测试2.边界值分析法…

算法训练 6-1 递归求二项式系数值

算法训练 6-1 递归求二项式系数值 问题描述样例输入一个满足题目要求的输入范例。3 10样例输出与上面的样例输入对应的输出。数据规模和约定输入数据中每一个数的范围。例&#xff1a;结果在int表示时不会溢出。 import java.util.Scanner;public class Main {public static v…

印象笔记mac版 同步问题_印象笔记表示 今年将大幅提升产品体验

【手机中国新闻】尽管去年取得了一些成绩&#xff0c;但印象笔记依旧在业务泥潭中苦苦挣扎&#xff0c;该公司一度裁员15%并承受了一些高管的离职。Ian Small去年10月起取代2015年上任的Chris O Neill成为印象笔记现任CEO&#xff0c;相较于一些相关的老生常谈的创新&#xff0…

函数基本语法及特性

我先复制了下面一段&#xff0c;挺有意思的。 背景提要 现在老板让你写一个监控程序&#xff0c;监控服务器的系统状况&#xff0c;当cpu&#xff3c;memory&#xff3c;disk等指标的使用量超过阀值时即发邮件报警&#xff0c;你掏空了所有的知识量&#xff0c;写出了以下代码 …