Submission #706686

# Submission time Handle Problem Language Result Execution time Memory
706686 2023-03-07T11:26:37 Z Alihan_8 Crocodile's Underground City (IOI11_crocodile) C++17
89 / 100
508 ms 68088 KB
#include <bits/stdc++.h>
#include "crocodile.h"
// include <ext/pb_ds/assoc_container.hpp>
// include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
using namespace std;
#define all(x) x.begin(), x.end()
#define pb push_back
// define ordered_set tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>
#define mpr make_pair
#define ln '\n'
void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
//#define int long long
typedef long long ll;
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
    int n = N, m = M, k = K;
    vector <pair<int,int>> g[n];
    for ( int i = 0; i < m; i++ ){
        auto [x, y] = R[i];
        g[x].pb({L[i], y});
        g[y].pb({L[i], x});
    }
    const ll inf = 1e17+1;
    priority_queue <pair<ll,int>> q;
    vector <pair<ll,ll>> dis(n, {inf, inf});
    for ( int i = 0; i < k; i++ ){
        dis[P[i]] = {0, 0};
        q.push({0, P[i]});
    }
    while ( !q.empty() ){
        auto [val, cur] = q.top();
        q.pop(); val = -val;
        if ( val != dis[cur].second ) continue;
        for ( auto [w, to]: g[cur] ){
            int new_dis = val+w;
            auto &[l, r] = dis[to];
            if ( l > new_dis ){
                r = l, l = new_dis;
                q.push({-r, to});
            }
            else if ( r > new_dis ){
                r = new_dis;
                q.push({-r, to});
            }
        }
    }
    return dis[0].second;
}
#if false
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m, k; cin >> n >> m >> k;
    int R[m][2], L[m], p[k];
    for ( int i = 0; i < m; i++ ){
        cin >> R[i][0] >> R[i][1];
    }
    for ( int i = 0; i < m; i++ ) cin >> L[i];
    for ( int i = 0; i < k; i++ ) cin >> p[i];
    cout << travel_plan(n, m, R, L, k, p);

    cout << '\n';
/*
5 4 3
0 1
0 2
3 2
2 4
2 3 1 4
1 3 4
answer: 7

5 7 2
0 2
0 3
3 2
2 1
0 1
0 4
3 4
4 3 2 10 100 7 9
1 3
answer: 14
*/
}
#endif

Compilation message

crocodile.cpp: In function 'void IO(std::string)':
crocodile.cpp:12:29: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 | void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
crocodile.cpp:12:70: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 | void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                                                               ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 444 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 444 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 596 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 4 ms 748 KB Output is correct
13 Correct 3 ms 852 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 444 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 596 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 4 ms 748 KB Output is correct
13 Correct 3 ms 852 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 388 ms 59260 KB Output is correct
17 Correct 94 ms 16676 KB Output is correct
18 Correct 103 ms 18116 KB Output is correct
19 Correct 508 ms 68088 KB Output is correct
20 Correct 257 ms 47340 KB Output is correct
21 Correct 36 ms 6864 KB Output is correct
22 Incorrect 269 ms 45216 KB Output isn't correct
23 Halted 0 ms 0 KB -