Submission #683774

# Submission time Handle Problem Language Result Execution time Memory
683774 2023-01-19T10:34:24 Z speedyArda Jakarta Skyscrapers (APIO15_skyscraper) C++14
10 / 100
3 ms 2456 KB
#include "bits/stdc++.h"
 
using namespace std;
const int MAXN = 3e4+5;
 
vector<set< int> > adj(MAXN);
vector< vector <  int > > doges(MAXN);
int dp[MAXN];
map< pair<int, int>, bool > done;
bool visited[MAXN];
int main() 
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    int goal, begin;
    for(int i = 0; i < m; i++)
    {
        pair<int, int> temp;
        cin >> temp.first >> temp.second;
        if(i == 1)
            goal = temp.first;
        else if(i == 0)
            begin = temp.first;
        doges[temp.first].push_back(temp.second);
    }
 
    for(int i = 0; i <= n; i++) {
        dp[i] = 1e9;
        visited[i] = false;
    }
    visited[begin] = false;
    dp[begin] = 0;
    set< pair<int, int> > curr; 
    curr.insert({0, begin});
    int ans =  1e9;
    while(!curr.empty())
    {
        pair<int, int> temp = *(curr.begin());
        int v = temp.second;
        int len = temp.first;
       // cout << v << "\n";
        curr.erase(curr.begin());
        if(v == goal)
            ans = min(len, ans);
        if(!visited[v]) // Add its edges
        {
            for(int doge : doges[v])
            {
                //if(v == 4)
                   // cout << doge << "\n";  
                //if(done[{v, doge}])
                    //continue;
                int curr = v;
                while(curr + doge < n)
                {
                    if(done[{curr, curr + doge}])
                        break;
                    done[{curr, curr + doge}] = true;
                    adj[curr].insert(curr + doge);
                    if(adj[curr].size() == 1 && curr != v)
                        dp[curr] = 1e9;
                    curr += doge;
                }
                curr = v;
                while(curr - doge >= 0)
                {
                    
                    if(done[{curr, curr - doge}])
                        break;
                    //if(v == 4)
                        //cout << curr << "\n";
                    done[{curr, curr - doge}] = true;
                    adj[curr].insert(curr - doge);
                    if(adj[curr].size() == 1 && curr != v)
                        dp[curr] = 1e9;
                    curr -= doge;
                }
            }
        }
 
        visited[v] = true;
 
        for(int e : adj[v])
        {
            if(dp[e] > len + 1)
            {
                curr.erase({dp[e], e});
                dp[e] = len + 1;
                curr.insert({dp[e], e});
            }
        }
        adj[v].clear();
        
        //dp[v] = 1e9;
 
    }
 
    if(ans == 1e9)
        ans = -1;
    cout << ans << "\n";
 
}

Compilation message

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:45:9: warning: 'goal' may be used uninitialized in this function [-Wmaybe-uninitialized]
   45 |         if(v == goal)
      |         ^~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2388 KB Output is correct
2 Correct 2 ms 2388 KB Output is correct
3 Correct 2 ms 2388 KB Output is correct
4 Correct 2 ms 2388 KB Output is correct
5 Correct 2 ms 2388 KB Output is correct
6 Correct 3 ms 2424 KB Output is correct
7 Correct 2 ms 2388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2388 KB Output is correct
2 Correct 2 ms 2388 KB Output is correct
3 Correct 2 ms 2388 KB Output is correct
4 Correct 2 ms 2388 KB Output is correct
5 Correct 2 ms 2388 KB Output is correct
6 Correct 2 ms 2388 KB Output is correct
7 Correct 2 ms 2388 KB Output is correct
8 Correct 2 ms 2388 KB Output is correct
9 Incorrect 2 ms 2456 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2388 KB Output is correct
2 Correct 2 ms 2388 KB Output is correct
3 Correct 2 ms 2388 KB Output is correct
4 Correct 2 ms 2388 KB Output is correct
5 Correct 2 ms 2388 KB Output is correct
6 Correct 2 ms 2388 KB Output is correct
7 Correct 2 ms 2388 KB Output is correct
8 Correct 1 ms 2388 KB Output is correct
9 Incorrect 2 ms 2388 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2388 KB Output is correct
2 Correct 2 ms 2388 KB Output is correct
3 Correct 2 ms 2388 KB Output is correct
4 Correct 2 ms 2360 KB Output is correct
5 Correct 2 ms 2388 KB Output is correct
6 Correct 2 ms 2452 KB Output is correct
7 Correct 2 ms 2456 KB Output is correct
8 Correct 2 ms 2388 KB Output is correct
9 Incorrect 3 ms 2456 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2388 KB Output is correct
2 Correct 2 ms 2388 KB Output is correct
3 Correct 2 ms 2388 KB Output is correct
4 Correct 2 ms 2388 KB Output is correct
5 Correct 2 ms 2388 KB Output is correct
6 Correct 2 ms 2388 KB Output is correct
7 Correct 1 ms 2388 KB Output is correct
8 Correct 2 ms 2388 KB Output is correct
9 Incorrect 3 ms 2388 KB Output isn't correct
10 Halted 0 ms 0 KB -