神校XJ之学霸兮,Dzy皇考曰JC。
摄提贞于孟陬兮,惟庚寅Dzy以降。
纷Dzy既有此内美兮,又重之以修能。
遂降临于OI界,欲以神力而凌♂辱众生。
今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边。
时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭。
而后俟其日A50题则又令其复原。(可视为立即复原)
然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通。
标签:
N≤100000 M≤500000 Q≤50000 1≤K≤15
数据保证没有重边与自环
Tip:请学会使用搜索引擎
#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=edges[i].next)
using namespace std;
const int BufferSize=1<<16;
char buffer[BufferSize],*head,*tail;
inline char Getchar() {
if(head==tail) {
int l=fread(buffer,1,BufferSize,stdin);
tail=(head=buffer)+l;
}
return *head++;
}
inline int read() {
int x=0,f=1;char c=Getchar();
for(;!isdigit(c);c=Getchar()) if(c==‘-‘) f=-1;
for(;isdigit(c);c=Getchar()) x=x*10+c-‘0‘;
return x*f;
}
const int maxn=100010;
const int maxm=200010;
struct Edge {int to,next;}edges[maxm<<1];
int n,m,e=1,clo,f[maxn],vis[maxn],A[maxm],first[maxn];
void AddEdge(int u,int v) {
edges[++e]=(Edge){v,first[u]};first[u]=e;
edges[++e]=(Edge){u,first[v]};first[v]=e;
}
void dfs(int x,int fa) {
vis[x]=++clo;
ren {
Edge& e=edges[i];
if(fa==e.to) continue;
if(!vis[e.to]) {
dfs(e.to,x);
A[i>>1]=f[e.to];
f[x]^=f[e.to];
}
else if(vis[x]>vis[e.to]) {
A[i>>1]=rand()+1;
f[x]^=A[i>>1];
f[e.to]^=A[i>>1];
}
}
}
int S[25],N;
int gauss() {
int i,k=0;
dwn(j,30,0) {
for(i=k+1;i<=N;i++) if(S[i]>>j&1) break;
if(i==N+1) continue;
swap(S[++k],S[i]);
for(i=1;i<=N;i++) if(i!=k&&(S[i]>>j&1)) S[i]^=S[k];
}
return S[N]>0;
}
int main() {
srand(52501);
n=read();m=read();
rep(i,1,m) AddEdge(read(),read());
dfs(1,-1);
dwn(T,read(),1) {
N=read();
rep(i,1,N) S[i]=A[read()];
int ans=gauss();
puts(ans?"Connected":"Disconnected");
}
return 0;
}
BZOJ3569: DZY Loves Chinese II
标签:
原文地址:http://www.cnblogs.com/wzj-is-a-juruo/p/5384451.html