因为我们可以通过把某一行读到末尾来获取真正的K,所以把它和假K异或之后就是之前联通的次数(异或的逆运算为其本身)。最后一次的暴力一下。

#include<cstdio>
#include<cstring>
using namespace std;
#define N 100001
#define M 500001
int n,m,K,q,ans;
char s[1001];
bool del[M<<1];
int en,v[M<<1],first[N],next[M<<1],bs[20];
void AddEdge(int U,int V)
{
v[++en]=V;
next[en]=first[U];
first[U]=en;
}
bool vis[N];
int cnt,RealK;
void dfs(int U)
{
vis[U]=1; ++cnt;
for(int i=first[U];i;i=next[i])
if((!vis[v[i]])&&(!del[i]))
dfs(v[i]);
}
int main()
{
int A,B;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d",&A,&B);
AddEdge(A,B);
AddEdge(B,A);
}
scanf("%d",&q);
for(int i=1;i<q;++i)
{
scanf("%d",&K);
RealK=0;
gets(s);
int len=strlen(s);
for(int j=0;j<len;++j)
if(s[j]==' ')
++RealK;
if(i!=1)
{
if((K^RealK)>ans) puts("Connected");
else puts("Disconnected");
}
ans=(K^RealK);
}
scanf("%d",&K);
RealK=0;
while(scanf("%d",&bs[++RealK])!=EOF);
if((K^(RealK-1))>ans) puts("Connected");
else puts("Disconnected");
ans=(K^(RealK-1));
for(int i=1;i<RealK;++i)
del[((bs[i]^ans)<<1)-1]=del[(bs[i]^ans)<<1]=1;
dfs(1);
puts(cnt==n?"Connected":"Disconnected");
return 0;
}

最新文章

  1. Python JPype 在 Win7 下安装与使用
  2. Android自定义View之倒计时Countdown实现
  3. Android使用Drawable资源之使用ClipDrawable资源 实现进入条
  4. C#:安装Windows服务,动态指定服务名及描述
  5. 【No.2 Ionic】Android打包
  6. $.extend,$.fn.extend,$.fn的区别
  7. Unity5 Standard自发光材质无效解决方法
  8. 光流算法:Brox光流的OpenCV源码解析
  9. 证书,CSP与Openssl
  10. PHP扩展高性能日志系统SeasLog简单上手
  11. 第一章04:JDK与JRE 区别
  12. Python练习一
  13. eclipse经常出现——未响应!!!
  14. Python写日志
  15. AC1000纪念
  16. JDK源码分析(一)——ArrayList
  17. 编译sass,遇到报错error style.scss (Line 3: Invalid GBK character &quot;\xE5&quot;)
  18. 操作dict时避免出现KeyError的几种方法
  19. jvm2
  20. hdu 1848(Fibonacci again and again)(SG博弈)

热门文章

  1. JS遮罩层弹框效果
  2. 动态规划:数位DP
  3. linux基础(2)
  4. Gradle体验/第一篇:下装、安装、配置、体验
  5. codechef September Challenge 2017 Sereja and Commands
  6. noip车站分级 拓扑排序
  7. Codeforces Round #301 解题报告
  8. python常用模块补充hashlib configparser logging,subprocess模块
  9. python学习笔记 协程
  10. 搭建git for windows服务器(100%可以成功)【转】