題目大意:
中山市有n條馬路和n個路口,給出ki,ki表示有ki條馬路與路口i相連,後面緊跟著ki個數字,表示與路口i直接相連的路口,作為一條交通網路,顯然每兩個路口之間都是可達的。市長決定在一些路口加裝電子眼,用來隨時監視路面情況。這些裝在路口的電子眼能夠監視所有連線到這個路口的馬路。現在市長想知道最少需要在多少個路口安裝電子眼才能監視所有的馬路。市長已經把所有的路口都編上了1~n的號碼。 給你中山市的地圖,你能幫忙嗎?
0<=n<=100000
題解:
f[i,0}表示第i個路口不安裝電子眼的最小安裝數量。
f[i,1]表示第i個路口安裝電子眼的最小安裝數量。
因為每兩個路口之間都是可達的,所以從任意乙個路口開始遞迴都可以。
f[i,0]=∑f[j,1] j為i直通的路口
f[i,0]=∑min(f[j,0],f[j,1]) j為i直通的路口
var
a:array [0..200001] of longint;
p,q:array [0..100001] of longint;
c:array [0..100001] of boolean;
f:array[0..100000,0..1] of longint;
n,i,j,s:longint;
function
min(a,b:longint):longint;
begin
if b>a then
exit(a);
exit(b);
end;
procedure
dg(dep:longint);
var i,x,y:longint;
begin
x:=1;
y:=0;
for i:=p[dep] to q[dep] do
begin
if c[a[i]]=false
then
begin
c[a[i]]:=true;
dg(a[i]);
x:=x+min(f[a[i],0],f[a[i],1]);
end;
y:=y+f[a[i],1];
end;
f[dep,1]:=x;
f[dep,0]:=y;
end;
begin
readln(n);
for i:=1
to n do
begin
read(s);
p[i]:=q[i-1]+1;
q[i]:=q[i-1]+s;
for j:=p[i] to q[i] do
read(a[j]);
readln;
end;
c[1]:=true;
dg(1);
writeln(min(f[1,0],f[1,1]));
end.
10 29NOIP模擬總結
今天做得很爛,所有題都沒有想到正解,打了四題暴力,掛了兩道,90分。上午時每題都想了一下,但是每題都沒有想出來。很多做題的方法居然沒有用出來,比如說t2打表找規律可以混24分,t4樹上最長不下降子串行,線段樹維護是應該要想到的,但是當時根本沒方向感,條件稍微換一下就繳械暴力了 暴力還打錯了 t1 開...
k好數 noip 動態規劃
k好數 問題描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入格式 ...
NOIP模擬 動態規劃 permut
題目描述 求由 1 到 n 一共 n 個數字組成的所有排列中,逆序對個數為 k 的有多少個。輸入格式 第一行為乙個整數 t 為資料組數。以下 t 行,每行兩個整數 n,k,意義如題目所述。輸出格式 對每組資料輸出答案對 10000 取模後的結果。樣例輸入 1 4 1 樣例輸出 3資料規模 對於 30...