BZOJ 3569 询问删除指定的k条边后图是否连通 线性基
来源:互联网 发布:纪念碑谷mac版 编辑:程序博客网 时间:2024/06/06 02:00
思路:
这题思路好鬼畜啊……
绝对是神思路
//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;const int N=100050,M=1000050;int n,m,first[N],next[M],v[M],tot=1,vis[N],a[M],b[N],xx,yy,stk[19],ans;void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}void dfs(int x){ vis[x]=1; for(int i=first[x];i;i=next[i]) if(!vis[v[i]])dfs(v[i]); else a[i]=rand(),b[x]^=a[i],b[v[i]]^=a[i];}void dfs2(int x){ for(int i=first[x];i;i=next[i]) if(!a[i])dfs2(v[i]),a[i]^=b[v[i]],b[x]^=b[v[i]];}bool Gauss(){ int flag=1; for(int i=30,j;~i;i--){ for(j=flag;j<=yy;j++) if(stk[j]&(1<<i))break; if(j==yy+1)continue; swap(stk[flag],stk[j]); for(int k=1;k<=yy;k++) if(k!=flag&&(stk[k]&(1<<i)))stk[k]^=stk[flag]; flag++; }return stk[yy];}int main(){ srand(1005730820); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++)scanf("%d%d",&xx,&yy),add(min(xx,yy),max(xx,yy)); dfs(1),dfs2(1); scanf("%d",&m); while(m--){ scanf("%d",&yy); for(int i=1;i<=yy;i++)scanf("%d",&xx),xx^=ans,stk[i]=a[xx]; if(Gauss())puts("Connected"),ans++; else puts("Disconnected"); }}
0 0
- BZOJ 3569 询问删除指定的k条边后图是否连通 线性基
- BZOJ 3237 连通图(线性基)
- js中询问是否要删除
- bzoj 3781: 小B的询问
- bzoj 3781: 小B的询问
- BZOJ 3781: 小B的询问
- bzoj 3781: 小B的询问
- BZOJ 3781 小B的询问
- 【BZOJ 1316】 树上的询问 树分治
- 【BZOj 3781】小B的询问 莫队
- BZOJ 3781小B的询问
- [BZOJ]3781: 小B的询问
- BZOJ 3781: 小B的询问
- BZOJ 1316: 树上的询问 点分治
- BZOJ 3781 小B的询问 莫队
- BZOJ 3781 小B的询问 莫队
- bzoj 5016: [Snoi2017]一个简单的询问
- BZOJ 3569 [Hash][线性基]
- 提高 Java 代码质量
- 在慕课上学习的,HTML和CSS基础学习笔记5
- English Summary(Jan)
- Codeforces 755B-PolandBall and Game
- Peter's Smokes
- BZOJ 3569 询问删除指定的k条边后图是否连通 线性基
- Makefile中的变量使用
- pat-bl-1054
- 详解Java中的clone方法 -- 原型模式
- linux整理笔记
- #NOIP1999#邮票面值设计
- kafka学习笔记:知识点整理
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 3
- 有监督学习VS无监督学习