您的位置:首页 > 其它

BZOJ3563 : DZY Loves Chinese

2014-05-10 07:12 204 查看
想法题,由于K是加密的,但是通过读入我们可以自己数出来这一行有几个数,

所以可以直接反解出之前回答为连通的个数

至于最后一个询问就用并查集暴力回答

var
n,i,m,s,k,j,q : longint;
u,v,cnt,f : array[0..500000] of longint;
c : array[1..15] of longint;
del : array[1..500000] of boolean;
function fa(x : longint) : longint;
begin
if f[x] = x then exit(x);
f[x] := fa(f[x]);
exit(f[x]);
end;
begin
readln(n,m);
for i := 1 to m do readln(u[i],v[i]);
readln(q);
for i := 1 to q do
begin
read(s);
k := 0;
while not eoln do
begin
inc(k);
read(c[k]);
end;
cnt[i-1] := k xor s;
readln;
end;
for i := 1 to q-1 do
if cnt[i] = cnt[i-1] then
writeln('Disconnected')
else
writeln('Connected');
for i := 1 to k do del[c[i] xor cnt[q-1]] := true;
for i := 1 to n do f[i] := i;
for i := 1 to m do
if not del[i] then
if fa(u[i]) <> fa(v[i]) then
begin
f[f[u[i]]] := f[v[i]];
dec(n);
end;
if n > 1 then
writeln('Disconnected')
else
writeln('Connected');
end.


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: