Submission #919848

#TimeUsernameProblemLanguageResultExecution timeMemory
919848LalicCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
440 ms64968 KiB
#include <bits/stdc++.h>
#include "crocodile.h"
using namespace std;

#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

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

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

int act[MAXN], dist[MAXN][2];
vector<pii> g[MAXN];

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
	for(int i=0;i<N;i++) dist[i][0]=dist[i][1]=INF;
	
	for(int i=0;i<M;i++){
		g[R[i][0]].pb({R[i][1], L[i]});
		g[R[i][1]].pb({R[i][0], L[i]});
	}
	
	priority_queue<pii, vector<pii>, greater<>> pq;
	for(int i=0;i<K;i++){
		act[P[i]]=1;
		pq.push({0, P[i]});
		dist[P[i]][0]=dist[P[i]][1]=0;
	}
	
	while(!pq.empty()){
		pii curr=pq.top();
		pq.pop();
		
		if(!act[curr.se]){
			act[curr.se]=1;
			continue;
		}
		else if(act[curr.se]==2) continue;
		act[curr.se]=2;
		
		for(auto u : g[curr.se]){
			if(dist[curr.se][1]+u.se<dist[u.fi][0]){
				dist[u.fi][1]=dist[u.fi][0];
				dist[u.fi][0]=dist[curr.se][1]+u.se;
				pq.push({dist[u.fi][0], u.fi});
			}
			else if(dist[curr.se][1]+u.se<dist[u.fi][1]){
				dist[u.fi][1]=dist[curr.se][1]+u.se;
				pq.push({dist[u.fi][1], u.fi});
			}
		}
	}
	
	return dist[0][1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...