Submission #1168543

#TimeUsernameProblemLanguageResultExecution timeMemory
1168543rayan_bdCyberland (APIO23_cyberland)C++20
44 / 100
28 ms12104 KiB
#include <bits/stdc++.h>
using namespace std;

const double INF = 5e18;
const int mxN = 2e5+100;

#define fi first
#define se second
#define all(v) v.begin(), v.end()

bool can_vis[mxN];
double dist[mxN]; 
vector<pair<int,double>> adj[mxN];

void dfs(int u,int H){
	can_vis[u]=1;
	if(u==H) return;
	for(auto it:adj[u]){
		if(!can_vis[it.fi]) dfs(it.fi,H);
	}
}

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){
	for(int i=0;i<=N;++i) adj[i].clear(),dist[i]=INF,can_vis[i]=0;
	for(int i=0;i<M;++i){
		
			adj[x[i]].push_back({y[i],(double)c[i]});
			adj[y[i]].push_back({x[i],(double)c[i]});
	
	} 

	dfs(0,H);

	if(!can_vis[H]) return -1;

	priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq;
	for(int i=0;i<N;++i){
		if(arr[i]==0&&can_vis[i]){
			pq.push({0,i}),dist[i]=0;
		}
	}
	
	while(pq.size()){
		auto tp=pq.top(); // dist,node
		pq.pop();
		if(tp.se==H) break;
		if(dist[tp.se]<tp.fi) continue;
		for(auto it:adj[tp.se]){
			if(dist[it.fi]>tp.fi+it.se){
				dist[it.fi]=tp.fi+it.se;
				pq.push({dist[it.fi],it.fi});
			}
		}
	}


	double prv=dist[H];

	for(int i=0;i<N;++i) dist[i]=INF;
	dist[0]=0;
	pq.push({0,0});
	while(pq.size()){
		auto tp=pq.top(); // dist,node
		pq.pop();
		if(tp.se==H) break;
		if(dist[tp.se]<tp.fi) continue;
		for(auto it:adj[tp.se]){
			if(dist[it.fi]>tp.fi+it.se){
				dist[it.fi]=tp.fi+it.se;
				pq.push({dist[it.fi],it.fi});
			}
		}
	}

	return (double)(min(prv,dist[H]));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...