2017 6 4 入門組 NO 6 樹

2022-09-18 01:15:15 字數 2145 閱讀 6029

80%:做不出100%,先來個80分水法

首先將x,y之間有邊的記錄兩個,存在a陣列裡,乙個是x,y,另乙個是y,x

然後將這個a陣列排序,將a[i,1]按公升序排序。

then 就可以求出每乙個點與多少個點有邊,求出每乙個點的"子點"的區間,用l和r陣列存

再用dfs求出以1作根,每乙個點的father是誰

預處理over

如果為1,新建乙個陣列k來存它們的變化;

如果為2,就從這個點往回推,如果為偶數次就+k[j],如果為奇數次就-k[j],j=father[j]

80%**:

var a:array[0..200000,1..2]of longint;

father,l,r,k,d:array[0..100000]of longint;

v:array[0..100000]of boolean;

n,m,i,j,z,y,x,w:longint;

procedure

qsort

(l,r:longint);

var i,j,mid:longint;

begin

if l>=r then

exit;

i:=l; j:=r; mid:=a[(l+r) div

2,1];

repeat

while a[i,1]do inc(i);

while a[j,1]>mid do dec(j);

if i<=j then

begin

a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];

inc(i);dec(j);

end;

until i>j;

qsort(i,r);

qsort(l,j);

end;

procedure

find_father

(x:longint);

var i:longint;

begin

v[x]:=false;

for i:=l[x] to r[x] do

if v[a[i,2]]=true

then

begin

father[a[i,2]]:=x;

find_father(a[i,2]);

end;

end;

begin

readln(n,m);

for i:=1

to n do

read(d[i]);

readln;

for i:=1

to n-1

dobegin

readln(x,y);

a[i*2-1,1]:=x;

a[i*2-1,2]:=y;

a[i*2,1]:=y;

a[i*2,2]:=x;

end;

qsort(1,(n-1)*2);

for i:=1

to (n-1)*2

dobegin

if a[i,1]<>a[i-1,1] then l[a[i,1]]:=i;

if a[i,1]<>a[i+1,1] then r[a[i,1]]:=i;

end;

fillchar(v,sizeof(v),true);

find_father(1);

for i:=1

to m do

begin

read(x);

if x=1

then

begin

readln(j,y);

k[j]:=k[j]+y;

end;

if x=2

then

begin

readln(w);

j:=w;y:=0;z:=d[w];

while j<>0

dobegin

y:=1-y;

if y=0

then z:=z-k[j] else z:=z+k[j];

j:=father[j];

end;

writeln(z);

end;

end;

end.

2017 6 4 入門組 NO 1 k好數

方法 資料1 n 1000000,時間複雜度最大o 1000000 6 暴力足夠了,於是,便開始碼暴力 迴圈列舉i,將i轉為字串,每一位的判斷是否超過k 如果每一位都沒超過就 1 方法 動態規劃 找一找每一位於上一位的關係,可以發現。設n 236,k 5,如果最後一位的數x大於k,則上一位數,只能取...

2017 6 4 入門組 NO 4 猜數

這題就是求乙個區間 l.r 那開始將l 10000 r 10000 每次輸入一次判斷,如果為 n 那麼就將符號反轉,如 那麼符號處理好後,如果為 或 那麼如果當x大於l且小於或等於r,則l x 如果當x大於r,則輸出 impossible 如果為 如果當x小於l,則輸出 impossible tip...

2016藍橋杯B組 NO 6

方格填數 如下的10個格仔 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。include include include include using n...