明明是一道難度不大的題,我卻做了N天才做出來,慚愧慚愧!看到題的第一想法就是如果A控制了B,就把B所占有的股份傳給A以及A的母公司,并且這樣遞歸下去。可自己編程會發生股份重復計算的情況,解決方法是當將B的股份更新到A上時(通過母公司的關系找到A),如果之前A已經直接或間接控制了B,那么如果再加就算是重復計算了。但在判斷A是否直接或間接控制B時,又要判斷是否有環。
后來在網上找到了一種解法:當發現A控制B時,將B的股份傳給A,如果發現增加股份之后,A中的股份[A][i] > 50 并且A還沒有控制i,則將(A, i)加入隊列。一直循環操作,直至隊列為空為止。
官方的解題報告中,其實就是我一開始想的遞歸的方法,他在更新(A, B)時:
- 如果A已經控制B,退出
- 若沒有,control[A][B] = 1
- 將B的股份傳給A
- 枚舉已控制了A的i,遞歸更新(i, B)
- 枚舉A的股份[A][k],如果大于50,遞歸更新(A, k)