博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4025 : 二分图
阅读量:4328 次
发布时间:2019-06-06

本文共 1186 字,大约阅读时间需要 3 分钟。

考虑离线。

用Link-Cut Tree维护删除时间的最大生成树。

加入一条边时,如果两点不连通则直接link,否则肯定有一条边多余,若形成奇环则将多余的边加入集合。

删除一条边时,若这条边是树边则直接删除,否则若在集合中,则从集合中删除。

查询时,如果集合中没有边,则为二分图。

 

#include
const int N=100010,M=200010,P=300010;int n,m,T,i,x,cnt;bool on[M],in[M];struct Edge{int x,y,z;}e[M];struct E{int v;E*nxt;}*ga[N],*gd[N],pool[M<<1],*cur=pool,*p;inline void adda(int x,int y){p=cur++;p->v=y;p->nxt=ga[x];ga[x]=p;}inline void addd(int x,int y){p=cur++;p->v=y;p->nxt=gd[x];gd[x]=p;}inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}int f[P],son[P][2],val[P],sum[P],mn[P],from[P],tmp[P];bool rev[P];inline void swap(int&a,int&b){int c=a;a=b;b=c;}inline bool isroot(int x){return !f[x]||son[f[x]][0]!=x&&son[f[x]][1]!=x;}inline void rev1(int x){if(!x)return;swap(son[x][0],son[x][1]);rev[x]^=1;}inline void pb(int x){if(rev[x])rev1(son[x][0]),rev1(son[x][1]),rev[x]=0;}inline void up(int x){ mn[x]=val[x],from[x]=x,sum[x]=x>n; if(son[x][0]){ if(mn[son[x][0]]
nxt)add(p->v); for(p=gd[i];p;p=p->nxt)del(p->v); puts(cnt?"No":"Yes"); } return 0;}

  

转载于:https://www.cnblogs.com/clrs97/p/4709115.html

你可能感兴趣的文章
编程重点
查看>>
00-A-springmvc分布式项目项目结构
查看>>
vs调试时报503错误
查看>>
SVN使用&CVS使用
查看>>
redis
查看>>
Oracle存储过程中如何使用游标
查看>>
揭开NodeJS的神秘面纱!
查看>>
Number Triangles
查看>>
Ext分页实现(前台与后台)
查看>>
转 迭代器模式
查看>>
CYQ.Data V5 MAction新增加SetExpression方法说明
查看>>
数据安全&MD5加密
查看>>
bzoj 2594: 水管局长数据加强版 Link-Cut-Tree
查看>>
世界是数字的观后感
查看>>
由DBCursor的“can't switch cursor access methods”异常引发的思考
查看>>
LUOGU P1438 无聊的数列 (差分+线段树)
查看>>
引用和指针的区别
查看>>
stm32 usart 异步传输示例
查看>>
yum 安装过程下载的包存放路径
查看>>
二叉树
查看>>