LCA - Lowest Common Ancestor

Поділитися
Вставка
  • Опубліковано 5 кві 2021
  • 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
    @Errichto  3 роки тому +34

    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 роки тому +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
    @coefficient1359 3 роки тому +143

    Errichto should be in the UN protected list ❤.

  • @allwell8570
    @allwell8570 3 роки тому +16

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

  • @mukulkumar2316
    @mukulkumar2316 3 роки тому +33

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

  • @ksg7882
    @ksg7882 3 роки тому +43

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

  • @ShubhamKumar-me7xy
    @ShubhamKumar-me7xy 3 роки тому +3

    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
    @bethsuni4011 3 роки тому

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

  • @hydroUNI
    @hydroUNI 3 роки тому +4

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

  • @saiprasadduduka2155
    @saiprasadduduka2155 3 роки тому

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

  • @alexandruhritcan9727
    @alexandruhritcan9727 3 роки тому +5

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

  • @desyfer1709
    @desyfer1709 3 роки тому +8

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

  • @patrykwronski8476
    @patrykwronski8476 3 роки тому +1

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

  • @saitejaballa6759
    @saitejaballa6759 7 місяців тому

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

  • @glaucoa.9214
    @glaucoa.9214 3 роки тому +4

    Errichto one of the best, I love his videos.

  • @simone8504
    @simone8504 3 роки тому +1

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

  • @abdullahzaghmout5615
    @abdullahzaghmout5615 3 роки тому

    Thank you for these videos. Keep on making them

  • @BelalMoawadOfficial
    @BelalMoawadOfficial 3 роки тому +1

    your explanation is great, thank u

  • @nguyentrongvanviet
    @nguyentrongvanviet 2 роки тому

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

  • @josephwong2832
    @josephwong2832 2 роки тому

    awesome explanation of LCA and Binary Lifting

  • @shivanshsrivastava9264
    @shivanshsrivastava9264 10 місяців тому

    Loved the explanation. Thanks a lot

  • @RajatSingh-dg8ov
    @RajatSingh-dg8ov 3 роки тому +1

    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

  • @sunnyrawat931
    @sunnyrawat931 Рік тому

    Clear and concise. I love it.

  • @iPaperPlane
    @iPaperPlane 3 роки тому +6

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

  • @ani68
    @ani68 3 роки тому +3

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

    • @ani68
      @ani68 3 роки тому

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

  • @teddq7210
    @teddq7210 3 роки тому +1

    Your contents are awesome ❤️

  • @dtrade4787
    @dtrade4787 Рік тому

    Thanks man. Astounded by your brain

  • @itz_me_imraan02
    @itz_me_imraan02 2 роки тому

    His voice and explanation both are soothing🙂

  • @luizeduardoreis7657
    @luizeduardoreis7657 Місяць тому

    You are an amazing teacher

  • @gitanshgarg3146
    @gitanshgarg3146 3 роки тому +1

    Great content 🙌💯

  • @wow4669
    @wow4669 Рік тому

    Thanks you😊

  • @prasenjitmondal673
    @prasenjitmondal673 3 роки тому +1

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

  • @satyampal7235
    @satyampal7235 Рік тому

    Thanks it was helpful.

  • @srishtikdutta8946
    @srishtikdutta8946 3 роки тому +6

    Please do some tutorials on centroid and heavy light decomposition.

  • @GGxEpsilon
    @GGxEpsilon 3 роки тому +2

    2 videos in a week. 🎉

  • @prathamkumar2968
    @prathamkumar2968 3 роки тому

    The preprocessing of vector

    • @pankaj2077
      @pankaj2077 3 роки тому +1

      He meant every query is answered in O(logN)

  • @GauravKumar-ue7nz
    @GauravKumar-ue7nz 2 роки тому

    Thank you so Much

  • @AniketSingh-mt6zr
    @AniketSingh-mt6zr 11 місяців тому

    Absolute beauty

  • @Harpreetsingh-qc8sf
    @Harpreetsingh-qc8sf 3 роки тому +3

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

  • @seaorz
    @seaorz 3 роки тому

    Thanks!

  • @mizel_1121
    @mizel_1121 3 роки тому

    I love you bro u help me a lot

  • @vigneshs8738
    @vigneshs8738 2 роки тому

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

  • @Kyanqy_Tarb3r
    @Kyanqy_Tarb3r 9 місяців тому

    which compiler are you using in this video?

  • @manojmaurya9683
    @manojmaurya9683 3 роки тому

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

  • @mzmzgreen
    @mzmzgreen 3 роки тому

    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 роки тому +2

      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.

  • @anonymoussloth6687
    @anonymoussloth6687 2 роки тому

    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

  • @vatsalagarwal2466
    @vatsalagarwal2466 3 роки тому

    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 роки тому +1

      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.

  • @miku6701
    @miku6701 3 роки тому +1

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

  • @ananyapamde4514
    @ananyapamde4514 2 роки тому

    May god bless you

  • @ramsankar585
    @ramsankar585 3 роки тому

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

  • @sumitrohilla1494
    @sumitrohilla1494 2 роки тому

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

  • @Harpreetsingh-qc8sf
    @Harpreetsingh-qc8sf 3 роки тому +1

    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 роки тому +2

      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

  • @raven9965
    @raven9965 3 роки тому

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

    • @Errichto
      @Errichto  3 роки тому +2

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

  • @rredy
    @rredy 4 місяці тому

    You used to live in Suwałki?

  • @pavankumar-cy6mg
    @pavankumar-cy6mg 3 роки тому +1

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

  • @kongzilla2897
    @kongzilla2897 3 роки тому

    Nice :)

  • @juan-tj1xf
    @juan-tj1xf 3 роки тому

    Geeeeezz...

  • @rugrid146
    @rugrid146 3 роки тому

    COME TO BRAZIL !!!

  • @josealejandrovaroncarreno1692
    @josealejandrovaroncarreno1692 3 роки тому

    is beutiful

  • @hkt9100
    @hkt9100 3 роки тому

    hackercup T-shirt lol

  • @fruith_
    @fruith_ Рік тому

    Likes

  • @amiproject
    @amiproject 3 роки тому

    T

  • @harryguanous7198
    @harryguanous7198 3 роки тому

    Please heart me, i somehow arrived early