這題,我們可以轉化成乙個圖論問題,我們只需要記錄入度個數就好了
首先,
然後我們把它刪掉之後,就可以看到,它所能控制的點就合法了,因為它可以被乙個不合法的點控制,並把合法的點的出度刪掉。
每次就是這樣做。
最後一種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。不過,如果把調查結...