【dfs】bzoj3563 DZY Loves Chinese
2015-03-17 17:39
239 查看
因为我们可以通过把某一行读到末尾来获取真正的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 ,next[M<<1],bs[20]; void AddEdge(int U,int V) { v[++en]=V; next[en]=first[U]; first[U]=en; } bool vis ; 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; }
相关文章推荐
- bzoj 3563: DZY Loves Chinese
- BZOJ3563 : DZY Loves Chinese
- BZOJ 3563 DZY Loves Chinese 并查集
- 3563: DZY Loves Chinese - BZOJ
- bzoj 3563: DZY Loves Chinese
- BZOJ3563 DZY Loves Chinese
- BZOJ3563/3569 DZY Loves Chinese II/DZY Loves Chinese
- BZOJ 3563 DZY Loves Chinese / BZOJ 3569 DZY Loves Chinese II 随机化+高斯消元解异或方程组
- [乱搞 暴力 并查集] BZOJ 3563 DZY Loves Chinese
- 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
- BZOJ 3569 DZY Loves Chinese(BZOJ 3563) II 线性基
- bzoj 3563: DZY Loves Chinese 并查集+乱搞
- BZOJ 3563 DZY Loves Chinese
- BZOJ 3563 DZY Loves Chinese(线性基)
- bzoj 3569: DZY Loves Chinese II
- BZOJ 3569 DZY Loves Chinese II
- BZOJ 3569 DZY Loves Chinese II(线性基)
- 【BZOJ 3569】 DZY Loves Chinese II
- bzoj 3569: DZY Loves Chinese II
- BZOJ 3569 DZY Loves Chinese II 高斯消元