awoo's blog

By awoo, history, 2 years ago, translation, In English

1923A - Moving Chips

Idea: BledDest

Tutorial
Solution (BledDest)

1923B - Monsters Attack!

Idea: BledDest

Tutorial
Solution (Neon)

1923C - Find B

Idea: Roms

Tutorial
Solution (Roms)

1923D - Slimes

Idea: BledDest

Tutorial
Solution (Neon)

1923E - Count Paths

Idea: BledDest

Tutorial
Solution (awoo)

1923F - Shrink-Reverse

Idea: adedalic

Tutorial
Solution (adedalic)
  • Vote: I like it
  • +62
  • Vote: I do not like it

| Write comment?
»
2 years ago, hide # |
 
Vote: I like it +5 Vote: I do not like it

I think E has same idea as this

»
2 years ago, hide # |
 
Vote: I like it +6 Vote: I do not like it

Problem C video Editorial : YOUTUBE VIDEO LINK Audio : English

  • »
    »
    2 years ago, hide # ^ |
    Rev. 2  
    Vote: I like it -35 Vote: I do not like it

    Bro in problem C why we can not only check the no. of ones in subarray, if no. of one is greater than (r-l)/2 than not possible . why my solution fail can you tell me. Pease Don't downvote me.

    • »
      »
      »
      2 years ago, hide # ^ |
      Rev. 4  
      Vote: I like it +5 Vote: I do not like it

      Test case :

      1

      6 1

      1 1 1 1 4 4

      1 6

      You can choose array b as : 2 2 2 2 2 2

      The main thing is ... You have to place 1 (in array b) on the elements which are not equal to 1 (in array a). and After placing 1, the remaining sum should be distributed among the elements which are 1 in array a. I hope it is clear

      You can refer to the video solution for detailed explanation.

    • »
      »
      »
      2 years ago, hide # ^ |
       
      Vote: I like it +13 Vote: I do not like it

      bro sent your code as a spoiler or as a link

»
2 years ago, hide # |
Rev. 2  
Vote: I like it +104 Vote: I do not like it

E can be solved linearly.

edit : I lost some rating but I think the problems were very nice :)

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it +7 Vote: I do not like it

    It was very beautiful solution.

  • »
    »
    2 years ago, hide # ^ |
    Rev. 2  
    Vote: I like it +3 Vote: I do not like it

    Can you explain this solution a bit ,like what is going in the dfs call

    • »
      »
      »
      2 years ago, hide # ^ |
       
      Vote: I like it +15 Vote: I do not like it

      At any point in the dfs, we keep track of how many beautiful paths we can create if we encounter every given color (the array stores it). So when we enter a vertex in the dfs, we can increment the beautiful path counter by the value for the color in the array.

      Then, on each subtree we explore from this new call to dfs, we just need to reset the value of the current color to 1, because it will block any path to previously visited vertices of the same color.

      Finally, when leaving the dfs, we should increase the initial value of the current color by one, because there will be one more beautiful path if we encounter the same color again. Try drawing what happens, it helps.

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it +3 Vote: I do not like it

    Outstanding solution, thank you for sharing!

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it -12 Vote: I do not like it

    Wow, exactly like my solution: 248115690. The human brain is mysterious!

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    So elegant!

»
2 years ago, hide # |
 
Vote: I like it +1 Vote: I do not like it

Wow, I just see a solution of E which takes $$$O(n)$$$ time. It just uses 1 DFS to calculate the result synchronously just by how we will do to find out the result of one color.

»
2 years ago, hide # |
Rev. 5  
Vote: I like it 0 Vote: I do not like it

I solved E with centroid decomposition (which is $$$O(n log n)$$$) but got TLE.247977712

But the Editorial says authors were expecting $$$O(n log^2 n)$$$ solutions. I'm confused.

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it +5 Vote: I do not like it

    Are you sure it is $$$O(n log n)$$$? It can't pass even if you increase time limit to $$$15$$$ seconds.

    • »
      »
      »
      2 years ago, hide # ^ |
      Rev. 13  
      Vote: I like it 0 Vote: I do not like it

      I check it again, I think all the things I do in function CD is linear.

      $$$T(n) = 2T(\frac{n}{2})+O(12 n)$$$(worst case of recurrance) implies that my solution has a time complexity of $$$O(n log n)$$$(Master theorem). Maybe I implement something wrong.(Or learnt centroid decomposition or Master theorem in the wrong way?)

      Btw, how did you know my code would TLE even if the time limit was 15 seconds?

      • »
        »
        »
        »
        2 years ago, hide # ^ |
        Rev. 3  
        Vote: I like it +1 Vote: I do not like it

        You can create a mashup and increase TL to 15 seconds. I don't know centroid decomposition lol:(

      • »
        »
        »
        »
        2 years ago, hide # ^ |
         
        Vote: I like it +7 Vote: I do not like it

        I checked again. It works $$$8$$$ seconds on test where $$$t = 1, n = 20000, a[i] = 1$$$ and graph edges = $$$(1, 2), (2, 3), (3, 4)$$$, .... So i think it's $$$n^2$$$.

        • »
          »
          »
          »
          »
          2 years ago, hide # ^ |
          Rev. 5  
          Vote: I like it +11 Vote: I do not like it

          Yes, you are probably right, my solution should be $$$O(n log n)$$$ indeed. However, the way i find centroids is wrong, causing my solution having $$$O(n^2)$$$ complexity. I fixed that and got AC.

          Thanks a lot!

  • »
    »
    6 months ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    Hey my centroid decomposition code got AC though

    My code

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Hello Codeforces! Please explain what virtual trees are (they are used in the second solution of the problem E).

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

Need Help.

Why does this solution give tle while the one given in editorial passes for the problem 1923E - Count Paths.

248160733

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    It's probably because you are merging everything into the parent instead of merging smaller children into the largest child. Merging everything means more merging work, which takes more time.

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

Can someone please tell on which case this is failing?

Spoiler
»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I had an idea that works in O(n):

Check this code:

https://mirror.codeforces.com/contest/1923/submission/247999826

»
2 years ago, hide # |
Rev. 2  
Vote: I like it +5 Vote: I do not like it

i have solved E linearly. Here is the solution

here ans[c] means how many visited nodes of color c are available to be the first vertex .

when we are going forward we can only add 1 node of that color with new node. And when we go backward we are getting 1 extra node to add with new nodes.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

In problem B, why is it always optimal to hit the nearest monster? There can be a possibility that there was another monster far away with much much greater health, and if certain bullets were not provided to them within the starting seconds, they would definitely hit the origin.

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    If that's the case, then you are doomed, since if you don't kill the closer monster first he will kill you before the further monster reaches you.

»
2 years ago, hide # |
 
Vote: I like it +5 Vote: I do not like it

You can use divide and conquer on tree to solve problem E easily in $$$O(n \log n)$$$ too. It is easy to think.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

If someone want to consult a centroid decomposition + set solution can see my submission: 248033502. My idea: I can count the number of way cross the centroid node for all node and use set to manage the first node in DFS way has color C.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I am unable to understand why the solution to problem E has time complexity O(n log^2 n ). For every node, we are iteration through all the children, and then for every child we are iterating through every color it has. Can someone explain it to me?

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

My solution for C got hacked. It seems somes python solutions are just taking more time. Can somebody explain ?

def f(c,l,r):
  if l == r:
    return False
  return c[r]-c[l-1] >= 0

def solve():
  n,q = list(map(int,input().split()))
  a = list(map(int,input().split()))
  b = [ -1 if x == 1 else x - 1 for x in a]  
  
  c = [0] 
  for i in range(n):
    c.append(c[-1]+b[i])

  for i in range(q): 
    l,r = map(int,input().split())
    if f(c, l, r): 
      print('yes')
    else:
      print('no')

   
t = int(input())
for _ in range(t):
  solve()
»
2 years ago, hide # |
 
Vote: I like it +3 Vote: I do not like it

About F's fact 4, two binary strings should have same number of '1'. Is it true?

  • »
    »
    2 years ago, hide # ^ |
     
    Vote: I like it 0 Vote: I do not like it

    If $$$s1=s2$$$, there will be same number of $$$1$$$'s. Otherwise, $$$s1 \lt s2$$$ or $$$s2 \lt s1$$$, and they don't have the same number of $$$1$$$'s. The same relationship will hold between $$$s1'$$$ and $$$s2'$$$ since the fact mentions that we are replacing the same number of $$$0$$$'s with $$$1$$$'s in both strings.

    For this problem though, $$$s1'$$$ and $$$s2'$$$ will always contain the same number of $$$1$$$'s. But this condition is not necessary for $$$s1$$$ and $$$s2$$$.

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

I solved E using stack for each color.

Here is my solution: 248216745

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

D was a realy good question. Great Contest

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

248285844 Problem D Whats wrong with my code please someone help. I just don't get why am i getting wrong answer.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

For Problem E, I came up with this simple solution.

void dfs(int s, int p, vector<int> *adj, map<int,int> &m, ll &ans, vector<int> &a){
    ans += m[a[s]];
    int t = m[a[s]];
    for(int u:adj[s]){
        if(u==p)
            continue;
        m[a[s]]=1;
        dfs(u,s,adj,m,ans,a);
    }
    m[a[s]]=t+1;
}
// not pasting template here, scan -> cin, print -> cout
void solve()
{
    int n;
    scan(n);
    vector<int> a(n);
    vscan(a);
    vector<int> adj[n];
    for(int i=0; i<n-1; i++){
        int x,y;
        cin>>x>>y;
        adj[x-1].push_back(y-1);
        adj[y-1].push_back(x-1);
    }
    map<int,int> m;
    ll ans = 0;
    dfs(0,-1,adj,m,ans,a);
    print(ans);
    return;
}
»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

can we solve C using sparse table ?

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

Can someone explain why jiangly's solution to problem E works in O(Nlog^2N). I know it utilizes small to large merging, but why does merging by the size of color sets yield that complexity? When we merge some node's children, set size won't necessarily go up 2x. For example combining sets (1,2,3) and (1,2,3) will give us (1,2,3) again, so the regular proof does not apply here.

Edit: Nvm, I neglected the fact that number of colors is always less or equal than the number of nodes in a subtree. The proof is trivial.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I do not understand why does my submission not pass the second test case and what am I doing wrong here. Can someone please explain? 248388078

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

I made video editorial for E discussing the DP idea (excluding the small to large trick).

I also made a contest with easy version of problem E and some followup problems. Access it here

»
2 years ago, hide # |
Rev. 2  
Vote: I like it +6 Vote: I do not like it

Problem F's "Fact 4",You should specify that s'1 and s'2 have the same number of 1s , otherwise your statement is wrong.

s1=1000011 s2=1000100 k-1=2 s'1=1001111 s'2=1000111 s1 < s2 and s'1 > s'2

»
2 years ago, hide # |
Rev. 2  
Vote: I like it 0 Vote: I do not like it

For E with Virtual Trees — I think you can do just an modified Euler walk of the tree first, and then walk on only the nodes of the same color in the order of the Euler walk: it will be eqv. to doing DFS on the Virtual Tree. So should be easy to do DP in each node for all its top-level children with/without being a direct descendent of the parent.

The final complexity should be just O(n), better than the O(n log n) of the tutorial.

The modification of the walk is that you put the node each time you visit it, not only first & last time.

»
2 years ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

How can we do B using DP?