Submission #314486

#TimeUsernameProblemLanguageResultExecution timeMemory
314486jli12345Crocodile's Underground City (IOI11_crocodile)C++14
100 / 100
877 ms64236 KiB
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <functional>
#include <cstdio>
#include <array>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <cstring>
#include <string>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <iterator>
#include <ext/pb_ds/assoc_container.hpp>
#include "crocodile.h"
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int, int> pii;

#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define ROF(i, b, a) for (int i = (b); i >= (a); --i)
#define f first
#define s second
#define mp make_pair
#define pb push_back

const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const ll MOD = 1e9+7;

ll mod(ll x, ll mod){
    return x >= mod ? x%mod:x;
}

void fio(string s){
    freopen((s+".in").c_str(), "r", stdin);
    freopen((s+".out").c_str(), "w", stdout);
}

int N, M, K;
vector <pii> arr[100100];

priority_queue<int> stor[100100];
int dist[100100];

struct comp{
    bool operator()(const pii &a, const pii &b){
        return a.s > b.s;
    }
};

priority_queue<pii, vector<pii>, comp> pq;

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
    FOR(i, 1, M){
        arr[R[i-1][0]].pb(mp(R[i-1][1], L[i-1]));
        arr[R[i-1][1]].pb(mp(R[i-1][0], L[i-1]));
    }
    memset(dist, INF, sizeof(dist));
    FOR(i, 1, K){
        dist[P[i-1]] = 0;
        pq.push(mp(P[i-1], 0));
    }
    while (!pq.empty()){
        int node = pq.top().f;
        int w = pq.top().s;
        pq.pop();
        if (w > dist[node]) continue;
        FOR(i, 0, (int)arr[node].size()-1){
            int nx = arr[node][i].f;
            int nw = arr[node][i].s;
            if ((int)stor[nx].size() < 2){
                stor[nx].push(w+nw);
            } else if (stor[nx].top() > w+nw){
                stor[nx].pop();
                stor[nx].push(w+nw);
            }
            if ((int)stor[nx].size() >= 2 && dist[nx] > stor[nx].top()){
                dist[nx] = stor[nx].top();
                pq.push(mp(nx, dist[nx]));
            }
        }
    }
    return stor[0].top();
}

Compilation message (stderr)

crocodile.cpp: In function 'void fio(std::string)':
crocodile.cpp:45:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   45 |     freopen((s+".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
crocodile.cpp:46:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   46 |     freopen((s+".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...