The way the client calculates the proof of work for each block is that it does the calculation only once.
Effectively, each block has a number which means "Proof of work for the chain, if this block was the leaf".
It also has a PoW for best chain variable. If you add a block and it is higher than the best chain, then it has to set that chain as the best.
Under your system, when a new block is added, it would be more complex.
A <- B <- C <- D
\ <- C' <- D'
\ <- D''
When comparing to D' to D, D' would get extra weight from D''. However, when comparing D' to D'', it wouldn't get the extra weight. There isn't one "work" number for each node.