# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1079814 | 2024-08-29T02:02:42 Z | _rain_ | 악어의 지하 도시 (IOI11_crocodile) | C++14 | 0 ms | 0 KB |
#include "crocodile.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define fixbug false //... READ INPUT const int maxn = 50000; const int maxm = 10000000; vector<pair<int,int>> g[maxn+2]; ll d[maxn+2][2]; bool ex[maxn+2]; #define ii pair<ll,int> #define fi first #define se second ll travel_plan(int n , int m , int R[][2] , int L[] , int k , int P[]){ for (int i = 0; i < m; ++i) { g[R[i][0]].push_back({R[i][1] , L[i]}); g[R[i][1]].push_back({R[i][0] , L[i]}); if (fixbug){ cout << R[i][0] << ' ' << R[i][1] << ' ' << L[i] << '\n'; } } priority_queue<ii,vector<ii>,greater<ii>> q; memset(d,0x3f,sizeof d); ll ans = d[0][0]; for (int i = 0 ; i < k; ++i){ d[P[i]][0] = d[P[i]][1] = 0; q.push({0 , P[i]}); } while (q.size()){ int u = q.top().second; ll cost = q.top().first; q.pop(); if (cost != d[u][0]) continue; if (fixbug){ cout << "(DEBUG)\n"; cout << u << ' ' << cost << "\n"; } for (auto & x : g[u]){ int v = x.first , w = x.second; ll riucost = d[v][0]; if (d[v][0] > cost + w){ d[v][0] = cost + w; if (d[v][1] > d[v][0]) swap(d[v][1] , d[v][0]); if (riucost > d[v][0]) q.push({d[v][0] , v}); } } } if (fixbug){ cout << ans << '\n'; for (int i = 0; i < n; ++i) cout << d[i][0] << '\n'; } return d[0][0]; }