題意:給定n個人,編號0~n-1,0為祖先,每個人有乙個師傅,每次從師傅傳功夫到徒弟時,功力值會削弱r,但可能會出現得道者,功力翻n倍,計算所有得道者功力值之和。
思路:因為計算功力值時要從祖先開始逐漸向下計算,所以我們需要儲存每個人的徒弟,然後從上向下遍歷即可,我這裡用的是鄰接表實現的,定義maxn個表頭結點head,head[i]其中包括它的第乙個徒弟編號nxt,翻的倍數,功力值;定義maxn個表結點,指向其兄弟結點。然後用dfs從祖先編號0開始搜即可,但我被兩個細節點卡了乙個多小時,卡到崩潰qaq:1.輸入的r是[0,100]的值,還需除100; 2. 我寫**沒帶腦子,在dfs函式中用全域性變數tmp作為指向徒弟的指標,然後程式一直在那執行錯誤的結果...
ac**:
1 #include2using
namespace
std;34
const
int maxn=100005;5
struct
nodehead[maxn];910
intn,k,tmp,nxt[maxn];
11double
z,r,sum;
1213
void dfs(int
p)23}24
}
2526
intmain()40}
41 dfs(0
);42 printf("
%lld\n
",(long
long
)sum);
43return0;
44 }
團體程式設計天梯賽PTA L2 020功夫傳人
分析 題意不難理解,看上去就是不太難的題,然後wa了一天qaq 用bfs和並查集應該都能做,然後我沒壓縮好,一會超時一會超記憶體。最後用模擬stack儲存輩分數降低了遞迴的時間複雜度。1 include 2 include3 include4 include5 include6 using name...
天梯賽 功夫傳人
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 一門武功能否傳承久遠並被發揚光大,是要看緣分的。一般來說,師傅傳授給徒弟的武功總要打個折扣,於是越往後傳,們的功夫就越弱 直到某一支的某一代突然出現乙個天分特別高的 或者是吃到了靈丹...
功夫傳人 (25 分)
7 42 功夫傳人 25 分 一門武功能否傳承久遠並被發揚光大,是要看緣分的。一般來說,師傅傳授給徒弟的武功總要打個折扣,於是越往後傳,們的功夫就越弱 直到某一支的某一代突然出現乙個天分特別高的 或者是吃到了靈丹 挖到了特別的秘笈 會將功夫的威力一下子放大n倍 我們稱這種 為 得道者 這裡我們來考察...