NOIP2014模擬11 6 創世紀

2021-08-03 15:35:00 字數 1578 閱讀 9530

這題,我們可以轉化成乙個圖論問題,我們只需要記錄入度個數就好了

首先,

然後我們把它刪掉之後,就可以看到,它所能控制的點就合法了,因為它可以被乙個不合法的點控制,並把合法的點的出度刪掉。

每次就是這樣做。

最後一種gg的情況,要特判一下。。。。

就是有環的情況:

於是,這樣一題看似很難的題就被化成乙個沒有任何演算法的題了。。。。

var

i,j,n,m,k,tot,ans:longint;

a,fa,num:array[0..1000000]of longint;

bz:array[0..1000000]of boolean;

procedure

pd;var

i:longint;

begin

for i:=1

to n do

if (fa[i]=0)and(bz[i]=false) then

begin

inc(num[0]);

num[num[0]]:=i;

end;

end;

begin

assign(input,'1.in');reset(input);

readln(n);

for i:=1

to n do

begin

read(a[i]);

inc(fa[a[i]]);

end;

pd;repeat

for i:=1

to num[0] do

begin

bz[num[i]]:=true;

if bz[a[num[i]]]=false

then

begin

inc(ans);

bz[a[num[i]]]:=true;

if fa[a[a[num[i]]]]>0

then

dec(fa[a[a[num[i]]]]);

end;

end;

num[0]:=0;

pd;until num[0]=0;

for i:=1

to n do

begin

if bz[i]=false

then

begin

k:=a[i];

bz[i]:=true;

tot:=1;

while k<>i do

begin

bz[k]:=true;

k:=a[k];

inc(tot);

end;

ans:=ans+tot div

2; end;

end;

writeln(ans);

end.

noip2014 螺旋矩陣 (模擬)

p1913螺旋矩陣 accepted 標籤 noip普及組2014 乙個 n 行 n 列的螺旋矩陣可由如下方法生成 從矩陣的左上角 第 1 行第 1 列 出發,初始時向右移動 如果前方是未曾經過的格仔,則繼續前進,否則右轉 重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中 依次填入 1,2...

NOIP2014模擬11 3 蛋糕

今天是bessie的生日,他買了乙個蛋糕和朋友們一起分享,蛋糕可以看成是乙個r行c列的 共有r c個格仔,每個格仔都有乙個0至9的數字,表示該格仔蛋糕擁有的巧克力。現在bessie要把蛋糕橫的切3刀再豎的切3刀,由於bessie刀法厲害,所以每個格仔蛋糕都是完整的,顯然蛋糕會被切成16份,然後bes...

NOIP2014 比例簡化 模擬

輸入檔案 ratio.in輸出檔案 ratio.out簡單對比 時間限制 1 s 記憶體限制 256 mb 在社交 上,經常會看到針對某乙個觀點同意與否的民意調查以及結果。例如,對某一觀點表示支援的有1498人,反對的有902人,那麼贊同與反對的比例可以簡單的記為1498 902。不過,如果把調查結...