Submission #1228099

#TimeUsernameProblemLanguageResultExecution timeMemory
1228099goduadzesaba사이버랜드 (APIO23_cyberland)C++20
44 / 100
28 ms9800 KiB
#include "cyberland.h"
#include <bits/stdc++.h>
using namespace std;
const long long inf=1e18;
bool u[100005]; vector <pair<int,long long> > v[100005];
vector <int> pt; int h;
void dfs(int i){
	u[i]=1; if (i==h) return;
	for (auto j:v[i]){
		if (!u[j.first]) dfs(j.first);
	}
}
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++) v[i].clear(); h=H;
	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]});
	}
	arr[0]=0; set <pair<long long,int>> s;
	long long d[N]; d[0]=0;
    for (int i=1; i<N; i++){
    	assert(arr[i]!=2); d[i]=inf;
	}
	for (int i=0; i<N; i++) u[i]=0; pt.clear();
	dfs(0); //cout<<u[54]<<"\n";
	for (int i=0; i<N; i++){
		if (arr[i]==0 && u[i]){
			s.insert({0,i}); d[i]=0;
		}
	}
	while (!s.empty()){
		int X=s.begin()->second; s.erase(s.begin());
		for (auto i:v[X]){
			if (d[i.first]>d[X]+i.second){
				s.erase({d[i.first],i.first});
				d[i.first]=d[X]+i.second;
				s.insert({d[i.first],i.first});
			}
		}
	}
//	int xx=H; cout<<xx<<" ";
//	while (xx>0){
//		for (auto j:v[xx]){
//			if (d[j.first]+j.second==d[xx]){
//				xx=j.first;
//				break;
//			}
//		} cout<<xx<<" ";
//	} cout<<"\n";
	//for (int i=0; i<N; i++) cout<<i<<" -> "<<d[i]<<"\n";
	if (d[H]==inf) return -1;
	return d[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...