浮雲洲之戰
(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題解:
當時對網路流還不熟悉,後來一反應,這不是乙個裸的有下界最小流嗎,可惜我當時想到也不會求……
**:
1view codeconst 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.
跟著洲洲哥一塊學習Swift 陣列
swift語言裡的陣列和字典中儲存的資料值型別必須明確。這意味著我們不能把不正確的資料型別插入其中。同時這也說明我們完全可以對獲取出的值型別非常自信。swift對顯式型別集合的使用確保了我們的 對工作所需要的型別非常清楚,也讓我們在開發中可以早早地找到任何的型別不匹配錯誤。陣列使用有序列表儲存相同型...
App Store店之戰將是客源之戰
交易過程 交易過程指的是交易的便捷性與安全性,總的來說,這些交易過程要麼可以輕易複製,要麼由第三方提供型別相同或相似的服務。交易的便捷性指的是,如何讓使用者方便地找到他所需要的產品或服務,如何方便地獲取這些他所找到的產品或服務,如何方便地為之支付其所應付的費用。安全性主要是指在費用的支付過程中消費者...
架構不是浮雲
架構不是浮雲 講述軟體架構的前世今生,拋開軟體架構的蓋頭來 講述軟體架構的發展歷程 講述系統架構的在軟體開發,軟體工程上的作用和地位 講述系統架構設計師與系統分析師,在軟體公司的作用,特點等 講述cto,技術總監,系統架構設計師與系統分析師的關係,作用 經濟領域有三套馬車 投資 消費 出口 軟體工程...