Submission #751311

#TimeUsernameProblemLanguageResultExecution timeMemory
751311coding_snorlaxCyberland (APIO23_cyberland)C++17
44 / 100
45 ms11388 KiB
#include<bits/stdc++.h> #include "cyberland.h" using namespace std; using ll = long long int; vector<ll> change_G[100002]; vector<pair<ll,ll>> G[100002]; set<pair<ll,ll>> now_node; ll dis[100002]; int vis[100002]={0}; int possible[100002]={0}; vector<int> sp_place; void init(int n){ for(int i=0;i<=n;i++){ vis[i]=0;possible[i]=0; dis[i]=100000000000000;G[i].clear();change_G[i].clear();sp_place.clear(); } } void dfs(int node){ possible[node]=1; for(int i:change_G[node]){ if(!possible[i]) dfs(i); } } double solve(int N,int M,int K,int H, vector<int> x,vector<int> y,vector<int> c,vector<int> arr){ int n=N,m=M; init(n); for(int i=0;i<=n;i++){ if(!arr[i]) sp_place.push_back(i); } sp_place.push_back(0); for(int i=0;i<m;i++){ if(x[i]==H || y[i]==H) continue; change_G[x[i]].push_back(y[i]); change_G[y[i]].push_back(x[i]); } dfs(0); possible[H]=1; for(int i=0;i<m;i++){ if(possible[x[i]] && possible[y[i]]){ G[x[i]].push_back(make_pair(c[i],y[i])); G[y[i]].push_back(make_pair(c[i],x[i])); } } dis[H]=0; vis[H]=1; for(auto i:G[H]){ dis[i.second]=dis[H]+i.first; now_node.insert(i); } dis[H]=0; while((int)now_node.size()){ auto it = *now_node.begin(); if(!vis[it.second]){ vis[it.second]=1; for(auto now:G[it.second]){ if(dis[now.second]>dis[it.second]+now.first){ dis[now.second]=dis[it.second]+now.first; now_node.insert(make_pair(dis[now.second],now.second)); } } } now_node.erase(it); } long long int answer = 100000000000000; for(int i:sp_place) answer = min(answer,dis[i]); if(answer==100000000000000) return -1; return answer; }
#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...