存下代码
查看原帖
存下代码
2674
「QQ红包」发红包了楼主2016/1/28 09:10
type node=record
     x,y,t:longint;
     end;
var a:array[0..800100]of node;
    i,j,n,m,k,xx,yy,c,lbf:longint;
    f,d,p,ans,lb,flag:array[0..400000]of longint;
function gf(u:longint):longint;
begin
if f[u]=u then exit(u);
f[u]:=gf(f[u]);
exit(f[u]);
end;
procedure hb(u,v:longint);
begin
if gf(u)<>gf(v) then begin
dec(c);f[f[u]]:=f[f[v]]; end;
end;
begin
assign(input,'p1197.in');
assign(output,'p1197.out');
reset(input);
rewrite(output);
readln(n,m);
for i:=0 to n do f[i]:=i;
for i:=1 to m do
begin
readln(xx,yy);
a[i*2-1].x:=xx;a[i*2-1].y:=yy;a[i*2-1].t:=lb[xx];lb[xx]:=2*i-1;
a[i*2].x:=yy;a[i*2].y:=xx;a[i*2].t:=lb[yy];lb[yy]:=2*i;
end;
readln(k);
for i:=1 to k do begin readln(p[i]);flag[p[i]]:=1;end;
c:=n-k;
for i:=1 to m do
begin
if (flag[a[i*2-1].x]=0) and(flag[a[i*2-1].y]=0)then hb(a[i*2-1].x,a[i*2-1].y);
end;
ans[k]:=c;
for i:=k downto 1 do
begin
lbf:=lb[p[i]];flag[p[i]]:=0;inc(c);
repeat
if flag[a[lbf].y]=0 then hb(a[lbf].x,a[lbf].y);
lbf:=a[lbf].t;
until lbf=0;
ans[i-1]:=c;
end;
for i:=0 to k do
writeln(ans[i]);
close(output);
end.

2016/1/28 09:10
加载中...