once_twice's blog

By once_twice, history, 8 days ago, In English,

Can someone help me in finding why my code TLE's for some cases.

Code: https://gist.github.com/medhruv7/98e802016a9f9c34cbe3e7dc178c0dd4

Problem: https://cses.fi/problemset/task/1195/

 
 
 
 
  • Vote: I like it
  • +6
  • Vote: I do not like it

»
8 days ago, # |
  Vote: I like it +2 Vote: I do not like it

I would suggest dijkstra.

To take care for the coupon we need to maintain two best values per city, one without having used the coupon, one with having used it.

We would use a priority_queue else TLE since it is to much state changes. It took me some tries to find a configuration where it is AC. Not sure if this is hackable.

I assume it would work if you use a priority_queue in function dick().

Code
  • »
    »
    8 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Can u please tell why priority queue has a better time complexity than a set? Even for question in SPOJ i saw people cursing set.

    • »
      »
      »
      8 days ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      The time complexity of set and priority_queue are same, they both should work. Problems arise by using a simple queue without sorting.

      In fact, if memory size matters, we can use an additional set to make sure every vertex is at most once added to the priority_queue. This limits the size of the queue to max the number of vertex.

      • »
        »
        »
        »
        8 days ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Then we can always use a set for that matter?

        • »
          »
          »
          »
          »
          8 days ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          priority_queue and set have the same time complexity, but still set is somewhat slower.

  • »
    »
    8 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I am using priority_queue only in dick()

»
8 days ago, # |
  Vote: I like it 0 Vote: I do not like it

»
8 days ago, # |
  Vote: I like it +4 Vote: I do not like it

I've solved the same problem recently with coincidentally the same idea as your's, here's my AC submission. https://paste.ubuntu.com/p/cKqC9Gfv6S/

  • »
    »
    8 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Yea i get the idea , but what is wrong with my implementation. Why does it TLE. It's really frustrating

    • »
      »
      »
      8 days ago, # ^ |
        Vote: I like it +3 Vote: I do not like it

      You put the vertex to pair.first, and dist to pair.second, so the queue sorts the entries by vertex number instead of distance.

      pq.push({to,dist[to]});

  • »
    »
    7 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    nice code can you tell me what is the significance of prev in your code you don't seem to use it anywhere also what i guess is that you were trying to track the path using prev and making the maximum of flight cost in your path to halve right? can you tell me why it won't work?

    • »
      »
      »
      7 days ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      So I was trying to make a greedy before. That take smallest cost path and then discount max element in that path. But that failed. So then I did dijkstra

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

      prev has no use in that question, I was doing CSES problems in a sequence and one question before that wanted you to find shortest path nodes so for that I used prev. I've made all my CSES submissions public to github if you want to checkout that question refer: https://codeforces.com/blog/entry/77863