並查集亂搞 bzoj1015

2022-03-30 13:24:14 字數 3142 閱讀 9218

建圖建錯4次 改了2個鐘。。。這本是道水題。。。

1

program

hehe;

2type

3 edge=record

4q,z,next:longint;

5end;6

var7

n,m,q,i,j,k,cnt:longint;

8 p,pd:array[0..500000] of

boolean;

9 e:array[0..500000] of

edge;

10 ans,c,first,f,d:array[0..500000] of

longint;

1112

function

find(a:longint):longint;

13begin

14if f[a]=a then

exit(a);

15 f[a]:=find(f[a]);

16exit(f[a]);

17end;18

19begin

20 fillchar(first,sizeof(first),255

);21 fillchar(e,sizeof(e),255

);22

fillchar(p,sizeof(p),true);

23read(n,m);

24for i:=0

to n-1

do25 f[i]:=i;

26for i:=1

to m do

27begin

28read(j,k);

29if first[j]=-1

then

30 first[j]:=i;

31 e[i].q:=j;

32 e[i].z:=k;

33 e[c[j]].next:=i;

34 c[j]:=i;

35if first[k]=-1

then

36 first[k]:=i+m;

37 e[i+m].q:=j;

38 e[i+m].z:=k;

39 e[c[k]].next:=i+m;

40 c[k]:=i+m;

41end;42

read(q);

43for i:=1

to q do

44begin

45 read(d[q-i+1

]);46 p[d[q-i+1]]:=false;

47end;48

for i:=0

to n-1

do49

if p[i] then

inc(cnt);

50for i:=0

to n-1

do51

if p[i] then

52begin

53 k:=first[i];

54while k<>-1

do55

begin

56if (p[e[k].q])and(p[e[k].z]) then

57if find(e[k].q)<>find(e[k].z) then

58begin

59 f[find(e[k].q)]:=find(e[k].z);

60dec(cnt);

61end

;62 k:=e[k].next;

63end;64

end;

65 ans[0]:=cnt;

66for i:=1

to q do

67begin

68inc(cnt);

69 p[d[i]]:=true;

70 k:=first[d[i]];

71while k<>-1

do72

begin

73if (p[e[k].q])and(p[e[k].z]) then

74if find(e[k].q)<>find(e[k].z) then

75begin

76 f[find(e[k].q)]:=find(e[k].z);

77dec(cnt);

78end

;79 k:=e[k].next;

80end

;81 ans[q-i+1]:=cnt;

82end;83

for i:=1

to q do

84writeln(ans[i]);

85 writeln(ans[0

]);86

end.

view code

time limit: 3 sec  memory limit: 162 mb

submit: 3484  solved: 1554

[submit][status][discuss]

很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級**統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級**,並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。 但好景不長,很快帝國又重新造出了他的超級**。憑藉這超級**的力量,帝國開始有計畫地摧毀反抗軍占領的星球。由於星球的不斷被摧毀,兩個星球之間的通訊通道也開始不可靠起來。現在,反抗軍首領交給你乙個任務:給出原來兩個星球之間的以太隧道連通情況以及帝國打擊的星球順序,以盡量快的速度求出每一次打擊之後反抗軍佔據的星球的連通快的個數。(如果兩個星球可以通過現存的以太通道直接或間接地連通,則這兩個星球在同乙個連通塊中)。

輸入檔案第一行包含兩個整數,n (1 <= n <= 2m) 和m (1 <= m <= 200,000),分別表示星球的數目和以太隧道的數目。星球用0~n-1的整數編號。接下來的m行,每行包括兩個整數x, y,其中(0<=x<>y

輸出檔案的第一行是開始時星球的連通塊個數。接下來的n行,每行乙個整數,表示經過該次打擊後現存星球的連通塊個數。

8 13

0 11 6

6 55 0

0 61 2

2 33 4

4 57 1

7 27 6

3 6516

3571

1123

3[submit][status][discuss]

BZOJ 1015 並查集 連通塊

很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的 機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直 接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫 地摧毀反抗軍...

bzoj1015 星球大戰starwar

很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫地摧毀反抗軍占領的...

jsoi2008星球大戰bzoj1015

很簡單的一題,但是資料範圍看錯了和讀題時沒看到是0到n 1搞得wa了一次tle了一次真是弱啊喵,就是簡單的一道離線然後並查集加點就可以了喵 include include include include define ll long long define n 400005 define m 400...