Submission #934985

#TimeUsernameProblemLanguageResultExecution timeMemory
934985tamir1Cyberland (APIO23_cyberland)C++17
20 / 100
33 ms10204 KiB
#include "cyberland.h"
#include <bits/stdc++.h>
#include <vector>
#define ff first
#define ss second
#define ll long long
using namespace std;
double ans1,ans2;
ll path[100010];
vector<pair<ll,ll>> v[100010];
vector<ll> ar;
bitset<100001> vis;
priority_queue<pair<ll,ll>> q;
ll h;
void dfs(ll a){
	if(vis[a]) return;
	vis[a]=1;
	for(pair<ll,ll> i:v[a]){
		dfs(i.ff);
	}
}
double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) {
	if(N==2){
		if(M>0) return c[0];
		else return -1;
	}
	if(N==3){
		bool p=false,q=false;
		ll d;
		for(int i=0;i<M;i++){
			if((x[i]==0 && y[i]==H) || (x[i]==H && y[i]==0)){
				p=true;
				ans1=c[i];
			}
			else if(x[i]==0 || y[i]==0){
				if(x[i]==0) d=y[i];
				else d=x[i];
				if(arr[d]==0) ans2=0;
				else if(arr[d]==1 || (arr[d]==2 && K<1)) ans2=c[i];
				else ans2=(double)c[i]/2;
				for(int j=0;j<M;j++){
					if((x[j]==d && y[j]==H) || (x[j]==H && y[j]==d)){
						q=true;
						ans2+=c[j];
					}
				}
			}
		}
		if(!p && !q) return -1;
		if(!p) return ans2;
		if(!q) return ans1;
		return min(ans1,ans2);
	}
	for(int i=0;i<N;i++){
		path[i]=-1;
	}
	for(int i=0;i<M;i++){
		v[x[i]].push_back({y[i],c[i]});
		v[y[i]].push_back({x[i],c[i]});
	}
	dfs(0);
	q.push({0,0});
	for(int i=0;i<N;i++){
		if(vis[i] && !arr[i]) q.push({0,i});
	}
	while(!q.empty()){
		ll dist=q.top().ff;
		ll a=q.top().ss;
		q.pop();
		if(path[a]!=-1) continue;
		path[a]=-dist;
		for(pair<ll,ll> i:v[a]){
			if(path[i.ff]==-1){
				q.push({dist-i.ss,i.ff});
			}
		}
	}
	for(int i=0;i<N;i++){
		v[i].clear();
	}
	vis.reset();
    return path[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...