제출 #680233

#제출 시각아이디문제언어결과실행 시간메모리
680233abcvuitunggioRelay Marathon (NOI20_relaymarathon)C++17
100 / 100
4264 ms125900 KiB
#include <bits/stdc++.h> using namespace std; const int INF=1e9+10; int a[100001],d[100001],ch[100001],n,m,k,u,v,w,res=INF*2; vector <pair <int, int>> ke[100001]; vector <int> ve[4]; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int f(int s, int e){ priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> q; for (int i=1;i<=n;i++){ d[i]=INF; ch[i]=0; } for (int i:ve[s]){ d[i]=0; q.push({0,i}); } for (int i:ve[e]) ch[i]=1; while (!q.empty()){ auto [du,u]=q.top(); q.pop(); if (ch[u]) return du; if (du!=d[u]) continue; for (auto [v,w]:ke[u]) if (d[v]>d[u]+w){ d[v]=d[u]+w; q.push({d[v],v}); } } return INF; } int main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n >> m >> k; while (m--){ cin >> u >> v >> w; ke[u].push_back({v,w}); ke[v].push_back({u,w}); } for (int i=1;i<=k;i++) cin >> a[i]; chrono::milliseconds ms(3000); chrono::time_point<chrono::system_clock> end=chrono::system_clock::now()+ms; while (chrono::system_clock::now()<end){ shuffle(a+1,a+k+1,rd); for (int i=0;i<4;i++) ve[i].clear(); for (int i=1;i<=k;i++) ve[rd()%4].push_back(a[i]); res=min(res,f(0,1)+f(2,3)); } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...