浮雲洲之戰

2022-05-12 12:45:54 字數 4273 閱讀 1010

浮雲洲之戰

(seawar.pas/c/cpp)

題目描述

浮雲洲是東海岸畔乙個風景如畫的小島,信仰海神的漁民們在此世代捕魚為生。浮雲洲

的領導者被稱為司卜,掌管島上的大事,魯明星就是司卜家的女兒。與浮雲洲的居民一樣,

魯明星天生有著對大自然無比的熱愛和對小動物的憐憫,但與大家不同的是,小小的她早已

踏遍各地河山,有著面對危險時勇敢果斷的號召力和戰鬥精神。在遊歷的過程中,魯明星認

識了精通兵法、武藝超群的豪俠管毅。意趣相投的兩人結伴而行,共同來到了浮雲洲。此時

恰逢海賊入侵浮雲洲,面對軟弱的島民們,魯明星堅決擔負起了組織擊退入侵者的重任。

浮雲洲的村莊之間通過單向道路連線,構成乙個有向無環圖。如果在某個村莊安排了守

衛,那麼這個守衛可以沿著某一條從這個村莊出發的路徑走下去,在路徑上的所有道路上安

放戰鬥設施。現在魯明星想知道,要想使所有的道路都被安放戰鬥設施,最少需要多少名守

衛?輸入格式

第一行乙個整數 n,表示浮雲洲裡村莊的個數。

接下來 n 行,每行的第乙個數是乙個整數,其中第 i+1 行的數是 di,表示從村莊 i 出發

有 di 條道路。每行緊接著會有 di 個整數,表示這些道路到達的村莊。

輸出格式

乙個整數 ans,表示最少需要的守衛人數。

樣例輸入

81 3

1 72 4 5

1 81 8

02 6 5

0樣例輸出

4資料範圍與約定

對於 30% 的資料,滿足 2<=n<=10。

對於 100% 的資料,滿足 2<=n<=100,0<=di題解:

當時對網路流還不熟悉,後來一反應,這不是乙個裸的有下界最小流嗎,可惜我當時想到也不會求……

**:

1

const inf=maxlongint;

2type node=record

3from,go,next,v:longint;

4end;5

vartot,i,j,n,m,maxflow,l,r,s,t,x,y,ans,ss,tt:longint;

6 h,head,q,cur,indeg,outdeg:array[0..500] of

longint;

7 e:array[0..50000] of

node;

8function

min(x,y:longint):longint;

9begin

10if xthen exit(x) else

exit(y);

11end;12

procedure

ins(x,y,z:longint);

13begin

14inc(tot);

15 e[tot].from:=x;e[tot].go:=y;e[tot].v:=z;e[tot].next:=head[x];head[x]:=tot;

16end;17

procedure

insert(x,y,z:longint);

18begin

19 ins(x,y,z);ins(y,x,0

);20

end;

21function

bfs:boolean;

22var

i,x,y:longint;

23begin

24 fillchar(h,sizeof(h),0

);25 l:=0;r:=1;q[1]:=s;h[s]:=1;26

while ldo

27begin

28inc(l);

29 x:=q[l];

30 i:=head[x];

31while i<>0

do32

begin

33 y:=e[i].go;

34if (e[i].v<>0) and (h[y]=0) then

35begin

36 h[y]:=h[x]+1

;37 inc(r);q[r]:=y;

38end

;39 i:=e[i].next;

40end;41

end;

42 exit (h[t]<>0

);43

end;

44function

dfs(x,f:longint):longint;

45var

i,y,used,tmp:longint;

46begin

47if x=t then

exit(f);

48 used:=0

;49 i:=cur[x];

50while i<>0

do51

begin

52 y:=e[i].go;

53if (h[y]=h[x]+1) and (e[i].v<>0) then

54begin

55 tmp:=dfs(y,min(e[i].v,f-used));

56 dec(e[i].v,tmp);if e[i].v<>0

then cur[x]:=i;

57 inc(e[i xor 1

].v,tmp);

58inc(used,tmp);

59if used=f then

exit(f);

60end

;61 i:=e[i].next;

62end;63

if used=0

then h[x]:=-1;64

exit(used);

65end;66

procedure

dinic;

67begin

68while bfs do

69begin

70for i:=0

to n+3

do cur[i]:=head[i];

71inc(maxflow,dfs(s,inf));

72end;73

end;

74procedure

init;

75begin

76 tot:=1;77

readln(n);

78 s:=0;t:=n+1

;79 ss:=n+2;tt:=n+3;80

for i:=1

to n do

81begin

82read(outdeg[i]);

83for j:=1

to outdeg[i] do

84begin

85read(x);

86inc(indeg[x]);

87insert(i,x,inf);

88 insert(i,tt,1

);89 insert(ss,x,1

);90

end;

91end;92

for i:=1

to n do

93begin

94if indeg[i]=0

then

insert(s,i,inf);

95if outdeg[i]=0

then

insert(i,t,inf);

96end;97

insert(t,s,inf);

98end;99

procedure

main;

100begin

101 s:=ss;t:=tt;

102 maxflow:=0

;103

dinic;

104 ans:=e[tot].v;

105 e[tot].v:=0;e[tot xor 1].v:=0

;106 s:=n+1;t:=0

;107 maxflow:=0

;108

dinic;

109 writeln(ans-maxflow);

110end

;111

begin

112 assign(input,'

input.txt

');assign(output,'

output.txt');

113reset(input);rewrite(output);

114init;

115main;

116close(input);close(output);

117end.

view code

跟著洲洲哥一塊學習Swift 陣列

swift語言裡的陣列和字典中儲存的資料值型別必須明確。這意味著我們不能把不正確的資料型別插入其中。同時這也說明我們完全可以對獲取出的值型別非常自信。swift對顯式型別集合的使用確保了我們的 對工作所需要的型別非常清楚,也讓我們在開發中可以早早地找到任何的型別不匹配錯誤。陣列使用有序列表儲存相同型...

App Store店之戰將是客源之戰

交易過程 交易過程指的是交易的便捷性與安全性,總的來說,這些交易過程要麼可以輕易複製,要麼由第三方提供型別相同或相似的服務。交易的便捷性指的是,如何讓使用者方便地找到他所需要的產品或服務,如何方便地獲取這些他所找到的產品或服務,如何方便地為之支付其所應付的費用。安全性主要是指在費用的支付過程中消費者...

架構不是浮雲

架構不是浮雲 講述軟體架構的前世今生,拋開軟體架構的蓋頭來 講述軟體架構的發展歷程 講述系統架構的在軟體開發,軟體工程上的作用和地位 講述系統架構設計師與系統分析師,在軟體公司的作用,特點等 講述cto,技術總監,系統架構設計師與系統分析師的關係,作用 經濟領域有三套馬車 投資 消費 出口 軟體工程...