LCA - Lowest Common Ancestor

Tutorial on LCA algorithm. We use Binary Lifting to get O(N*log(N)) preprocessing and O(log(N)) to find the lowest common ancestor of two nodes in a tree.
Binary Lifting video • Binary Lifting (Kth An...
SPOJ problem www.spoj.com/problems/LCASQ/
code github.com/Errichto/youtube/b...
Two homework problems:
1) Answer queries "find distance between two given nodes U and V" cses.fi/problemset/task/1135
2) Given a tree with weighted edges (i.e. every edge has some value), answer queries "given two nodes U and V, find minimum weight along path U-V". (I don't have a source for this one).
Coding live streams - / errichto
FAQ - github.com/Errichto/youtube/w...
Subscribe for more educational videos on algorithms, coding interviews and competitive programming.

Пікірлер: 78

  • @Errichto
    @Errichto3 жыл бұрын

    Here are two homework problems for you: 1) Answer queries "find distance between two given nodes U and V" cses.fi/problemset/task/1135 2) Given a tree with weighted edges (i.e. every edge has some value), answer queries "given two nodes U and V, find minimum weight along path U-V". (I don't have a source for this one).

  • @pycz

    @pycz

    3 жыл бұрын

    Oh, I tried to solve 1-st problem with python3, looks like I get it right, but on big input I stucked with TIME LIMIT EXCEEDED. But in Statistics sections I saw an accepted python solution. Any tips to speed up python code to fit into 1 second timeout? I am already: 1) Used collections.deque for dfs 2) Used array.array for up (partially), parents and depth arrays. 3) sys.stdin.readline() instead of input() I will appreciate any help!

  • @prakash_77

    @prakash_77

    3 жыл бұрын

    ​@@pycz I did with C++. 2 or 3 were getting TLE. It's probably because i/o is slow. I added these three at start of main function. 1.) ios::sync_with_stdio(0); 2.) cin.tie(0); 3.) cout.tie(0); in C++ and got AC. There'll be something similar to that in Python also.

  • @lakshyamittal3098

    @lakshyamittal3098

    3 жыл бұрын

    Is the second question a little bit like Sparse Table (RMQ)? But complexity for each query will be O(Log(N)) only because we still need to find the LCA. Am I right?

  • @exe2543

    @exe2543

    2 жыл бұрын

    @@pycz I got TLE with Java as well on the big inputs, but when I ran it locally I got the correct result. I tried using an iterative rather than recursive DFS but it still TLE's. I'm just going to assume it's an issue with reading the inputs because I have implemented the actual algorithm itself correctly and it produces the correct result (I'm using BufferedReader and PrintWriter).

  • @coefficient1359
    @coefficient13593 жыл бұрын

    Errichto should be in the UN protected list ❤.

  • @teddq7210

    @teddq7210

    3 жыл бұрын

    😀❤️💯

  • @allwell8570
    @allwell85703 жыл бұрын

    Generally, it is difficult to learn from extra-ordinary people like you. But you are exception to that also. Thank you so much.

  • @mukulkumar2316
    @mukulkumar23163 жыл бұрын

    After watching numerous errichto videos , whenever I explain my code to anyone else I get errichto's accent. Your videos are awesome.

  • @ksg7882
    @ksg78823 жыл бұрын

    I am simple man , i see Errichto is teaching something i will click it

  • @ShubhamKumar-me7xy
    @ShubhamKumar-me7xy3 жыл бұрын

    It's a great initiative by you to teach algorithms. Looking forward for more such great videos. Also add some more practice problems of whatever you explain.

  • @bethsuni4011
    @bethsuni40113 жыл бұрын

    Thanks for the lectures. I like this format a lot: short videos with explanation, code, and example.

  • @hydroUNI
    @hydroUNI3 жыл бұрын

    YES! A THOUSAND TIMES YES! Thank you soooooo much for making a video on LCA!

  • @saiprasadduduka2155
    @saiprasadduduka21553 жыл бұрын

    Some of your videos(like this one) are so well made. Thnx🔥

  • @alexandruhritcan9727
    @alexandruhritcan97273 жыл бұрын

    I know how to do LCA with RMQ, but this solution is something else I love it to bits 💚💚

  • @RajatSingh-dg8ov
    @RajatSingh-dg8ov3 жыл бұрын

    I know that these problems are very easy for you but trust me these are very hard for me. And if you are making it, I will watch it!. You are literal GOD in coding!. Please keep on making these very basic videos on concepts, I really liked your Binary Search video as well!. Thanks

  • @glaucoa.9214
    @glaucoa.92143 жыл бұрын

    Errichto one of the best, I love his videos.

  • @patrykwronski8476
    @patrykwronski84763 жыл бұрын

    Thank you Kamil for such a great explanation, keep up the good work:)

  • @saitejaballa6759
    @saitejaballa67596 ай бұрын

    The way you explained the binary lifting is just awesome ❤❤

  • @simone8504
    @simone85043 жыл бұрын

    Thank you i was searching for this after the binary lifting video 👍

  • @abdullahzaghmout5615
    @abdullahzaghmout56153 жыл бұрын

    Thank you for these videos. Keep on making them

  • @nguyentrongvanviet
    @nguyentrongvanviet2 жыл бұрын

    thank you so much I can finally solve the question on cses hope more video like this from you

  • @josephwong2832
    @josephwong28322 жыл бұрын

    awesome explanation of LCA and Binary Lifting

  • @desyfer1709
    @desyfer17093 жыл бұрын

    This guy doing a god's work...whoever is the god of cp

  • @GGxEpsilon

    @GGxEpsilon

    3 жыл бұрын

    Tourist

  • @BelalMoawadOfficial
    @BelalMoawadOfficial3 жыл бұрын

    your explanation is great, thank u

  • @itz_me_imraan02
    @itz_me_imraan022 жыл бұрын

    His voice and explanation both are soothing🙂

  • @teddq7210
    @teddq72103 жыл бұрын

    Your contents are awesome ❤️

  • @sunnyrawat931
    @sunnyrawat931 Жыл бұрын

    Clear and concise. I love it.

  • @shivanshsrivastava9264
    @shivanshsrivastava926410 ай бұрын

    Loved the explanation. Thanks a lot

  • @ani68
    @ani683 жыл бұрын

    This was the video which I wanted....thanks😊😊

  • @ani68

    @ani68

    3 жыл бұрын

    I think these concepts are very easy for kamil....😅

  • @iPaperPlane
    @iPaperPlane3 жыл бұрын

    Can't believe this still *F R E E*

  • @gitanshgarg3146
    @gitanshgarg31463 жыл бұрын

    Great content 🙌💯

  • @dtrade4787
    @dtrade4787 Жыл бұрын

    Thanks man. Astounded by your brain

  • @srishtikdutta8946
    @srishtikdutta89463 жыл бұрын

    Please do some tutorials on centroid and heavy light decomposition.

  • @prasenjitmondal673
    @prasenjitmondal6733 жыл бұрын

    Very Nice explanation. Thanks. Can you do a tutorial on heavy-light decomposition?

  • @prathamkumar2968
    @prathamkumar29683 жыл бұрын

    The preprocessing of vector

  • @pankaj2077

    @pankaj2077

    3 жыл бұрын

    He meant every query is answered in O(logN)

  • @luizeduardoreis7657
    @luizeduardoreis7657Ай бұрын

    You are an amazing teacher

  • @Harpreetsingh-qc8sf
    @Harpreetsingh-qc8sf3 жыл бұрын

    I am a beginner sir but really like your way hope i get green soon on cf

  • @Errichto

    @Errichto

    3 жыл бұрын

    Good luck!

  • @mizel_1121
    @mizel_11213 жыл бұрын

    I love you bro u help me a lot

  • @vigneshs8738
    @vigneshs87382 жыл бұрын

    The j iterator should only go reverse order from Log -1 to 0 and not the other which works in binary lifting?

  • @satyampal7235
    @satyampal7235 Жыл бұрын

    Thanks it was helpful.

  • @mzmzgreen
    @mzmzgreen3 жыл бұрын

    What about time/space complexity of this algorithm? Is it logN like in a binary search? I guess worst case is O(N) when first node is a root and second node is the deepest leaf, right?

  • @Errichto

    @Errichto

    3 жыл бұрын

    We only have for-loops of size log(N) so it's O(log(N)) per query. Preprocessing takes O(N*log(N)) space & time.

  • @GGxEpsilon
    @GGxEpsilon3 жыл бұрын

    2 videos in a week. 🎉

  • @AniketSingh-mt6zr
    @AniketSingh-mt6zr11 ай бұрын

    Absolute beauty

  • @Kyanqy_Tarb3r
    @Kyanqy_Tarb3r9 ай бұрын

    which compiler are you using in this video?

  • @wow4669
    @wow4669 Жыл бұрын

    Thanks you😊

  • @GauravKumar-ue7nz
    @GauravKumar-ue7nz2 жыл бұрын

    Thank you so Much

  • @seaorz
    @seaorz3 жыл бұрын

    Thanks!

  • @manojmaurya9683
    @manojmaurya96833 жыл бұрын

    People have their own kind hero.I have you #the best❤️

  • @Errichto

    @Errichto

    3 жыл бұрын

    Thanks :)

  • @anonymoussloth6687
    @anonymoussloth66872 жыл бұрын

    In the case of finding lca just once, doesn't this perform worse than the linear solution? Not only does it take extra space, but we do a linear DFS to pre process all parents and then find the lca

  • @notwatermango

    @notwatermango

    Жыл бұрын

    for small cases maybe, for larger ones the linear is worse

  • @ramsankar585
    @ramsankar5853 жыл бұрын

    can we move from lowest power to highest power? If not why?

  • @vatsalagarwal2466
    @vatsalagarwal24663 жыл бұрын

    I have noticed one thing whicle actually coding for the problem. In the second loop, from LOG - 1 to 0, if we change this to 0 to LOG - 1, the program gives WA for soms tcs. Can someone explain why ? if the LCA is xth ancestor of a and b (after equalizing the depths), does it matter how we access the bits of x. It can be either fromt MSB or LSB. Please clear this concept.

  • @allwell8570

    @allwell8570

    3 жыл бұрын

    0 to LOG-1 in last for loop will not work. Because we are moving both nodes one by one to the level just below the lowest common ancestor. Let us call this level as 'Limiting level'. Suppose, we have to make 2 jumps to reach limiting level. As you start for loop from 0, you'll check for 2^0 jumps from initial position, then it is allowed (as they will not be equal) , therefore you will make jump. From that position, you can check for 2, 4 ,8... jumps. But we are just 1 jump away from limiting level. Therefore we can not reach limiting level here, that is why it is not working.

  • @sumitrohilla1494
    @sumitrohilla14942 жыл бұрын

    Which drawing software is that...plz someone tell me

  • @kongzilla2897
    @kongzilla28973 жыл бұрын

    Nice :)

  • @raven9965
    @raven99653 жыл бұрын

    im guessing your using a PC, can you share what you are using to sketch, hardware and program?

  • @Errichto

    @Errichto

    3 жыл бұрын

    github.com/Errichto/youtube/wiki/FAQ#hardware

  • @ananyapamde4514
    @ananyapamde45142 жыл бұрын

    May god bless you

  • @pavankumar-cy6mg
    @pavankumar-cy6mg3 жыл бұрын

    what if last for loop goes form 0 to n-1

  • @miku6701
    @miku67013 жыл бұрын

    I'm tellin y'all, this guy is friends with Megamind

  • @rredy
    @rredy4 ай бұрын

    You used to live in Suwałki?

  • @Harpreetsingh-qc8sf
    @Harpreetsingh-qc8sf3 жыл бұрын

    I am not able to get ideas quickly for simple adhoc problems of A B problems please suggest me some idea where to practicr for these ques.

  • @Errichto

    @Errichto

    3 жыл бұрын

    Codeforces (div2&3, edu), Atcoder (ABC), Leetcode and basically all the platforms.

  • @Harpreetsingh-qc8sf

    @Harpreetsingh-qc8sf

    3 жыл бұрын

    Thanks Errichto hope you win codejam this tym

  • @rugrid146
    @rugrid1463 жыл бұрын

    COME TO BRAZIL !!!

  • @juan-tj1xf
    @juan-tj1xf3 жыл бұрын

    Geeeeezz...

  • @fruith_
    @fruith_ Жыл бұрын

    Likes

  • @josealejandrovaroncarreno1692
    @josealejandrovaroncarreno16923 жыл бұрын

    is beutiful

  • @hkt9100
    @hkt91003 жыл бұрын

    hackercup T-shirt lol

  • @amiproject
    @amiproject3 жыл бұрын

    T

  • @harryguanous7198
    @harryguanous71983 жыл бұрын

    Please heart me, i somehow arrived early