Description

神校XJ之学霸兮,Dzy皇考曰JC。
摄提贞于孟陬兮,惟庚寅Dzy以降。
纷Dzy既有此内美兮,又重之以修能。
遂降临于OI界,欲以神力而凌♂辱众生。
 
今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边。
时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭。
而后俟其日A50题则又令其复原。(可视为立即复原)
然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通。

Input

第一行N,M
接下来M行x,y:表示M条膴蠁边,依次编号
接下来一行Q
接下来Q行:
每行第一个数K而后K个编号c1~cK:表示K条边,编号为c1~cK
为了体现在线,c1~cK均需异或之前回答为连通的个数

Output

对于每个询问输出:连通则为‘Connected’,不连通则为‘Disconnected’
(不加引号)

Sample Input

5 10
2 1
3 2
4 2
5 1
5 3
4 1
4 3
5 2
3 1
5 4
5
1 1
3 7 0 3
4 0 7 4 6
2 2 7
4 5 0 2 13

Sample Output

Connected
Connected
Connected
Connected
Disconnected

HINT

N≤100000 M≤500000 Q≤50000 1≤K≤15
数据保证没有重边与自环
Tip:请学会使用搜索引擎

Solution

这个随机做法很巧妙啊……

首先我们$DFS$出一棵树,对于非树边赋随机值,树边为所有在树上覆盖它的非树边的异或和。

可以发现,对于给定边集,如果有子集异或和为$0$,那么图就被砍成不连通的了。

因为对于一条树边,如果想砍它让图不连通,就必须砍掉其他所有覆盖它的非树边。

所以每次询问用线性基维护一下就好了。

Code

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define N (100009)
#define M (500009)
#define MOD (1000000007)
using namespace std; struct Edge{int to,next;}edge[M<<];
int n,m,q,k,ans,val[M],XOR[N],DFN[N],d[],dfs_num;
int head[N],num_edge; inline int read()
{
int x=,w=; char c=getchar();
while (c<'' || c>'') {if (c=='-') w=-; c=getchar();}
while (c>='' && c<='') x=x*+c-'', c=getchar();
return x*w;
} void add(int u,int v)
{
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} void DFS(int x,int fa)
{
DFN[x]=++dfs_num;
for (int i=head[x]; i; i=edge[i].next)
if (!DFN[edge[i].to])
{
DFS(edge[i].to,x);
val[(i+)>>]=XOR[edge[i].to];
XOR[x]^=XOR[edge[i].to];
}
else if (DFN[edge[i].to]<DFN[x] && edge[i].to!=fa)
{
val[(i+)>>]=rand();
XOR[x]^=val[(i+)>>];
XOR[edge[i].to]^=val[(i+)>>];
}
} int main()
{
srand();
n=read(); m=read();
for (int i=; i<=m; ++i)
{
int u=read(),v=read();
add(u,v); add(v,u);
}
DFS(,);
q=read();
while (q--)
{
memset(d,,sizeof(d));
k=read(); int flag=;
for (int i=; i<=k; ++i)
{
int x=val[read()^ans];
for (int i=; i>=; --i)
if (x&(<<i))
{
if (!d[i]) {d[i]=x; break;}
x^=d[i];
}
if (!x) flag=;
}
ans+=flag;
if (flag) puts("Connected");
else puts("Disconnected");
}
}

最新文章

  1. 安装SQL提示重启电脑失败,解决办法
  2. Android中自定义checkbox样式
  3. 保存密码(KeyChain的使用)
  4. Symfony2学习笔记之表单
  5. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  6. hbase集群导入csv文件
  7. react native一键分享功能实现&amp;原理和注意点(支持微信、qq、新浪微博等)
  8. Web从入门到放弃&lt;4&gt;
  9. Oracle树查询及相关函数
  10. Spring MVC 上下文(ApplicationContext)初始化入口
  11. Datagrip导入导出为一个sql文件详细说明 (mysql)
  12. python基础篇_001_初识Python
  13. 【接口】【面试题】http协议相关面试题
  14. nginx 拒绝本地ip访问
  15. Python之路(第二十篇) subprocess模块
  16. video视频在本地可以播放,在服务器上不可以播放
  17. iOS实现基于VLC播放器的封装效果
  18. angular学习笔记(三十)-指令(4)-transclude
  19. java多态成员的特点
  20. 【postman】postman访问zuul路由网关,发生Could not get any response 的情况

热门文章

  1. 设置ul水平居中
  2. css布局记录之双飞翼布局、圣杯布局
  3. git使用基本教程
  4. 胡同门牌号-2015决赛Java语言A组第一题
  5. spring中@Scope控制作用域
  6. centos下Nginx安装和配置多个域名的虚拟主机
  7. css3 flex弹性盒子布局梳理,打通任督二脉
  8. js-权威指南学习笔记19.2
  9. java中return、break、continue的区别
  10. WebGIS裁剪算法-线裁剪多边形