제출 #899837

#제출 시각아이디문제언어결과실행 시간메모리
899837TAhmed33Reconstruction Project (JOI22_reconstruction)C++98
14 / 100
5080 ms22100 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector <ll> adj[501][501]; const ll inf = 1e16; int main () { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; bool flag = 1; for (int i = 1; i <= m; i++) { ll a, b, c; cin >> a >> b >> c; adj[a][b].push_back(c); adj[b][a].push_back(c); flag &= b == a + 1; } for (int i = 1; i < n; i++) { sort(adj[i + 1][i].begin(), adj[i + 1][i].end()); } int ptr[n + 1] = {}; int q; cin >> q; while (q--) { ll x; cin >> x; if (flag) { ll sum = 0; for (int i = 2; i <= n; i++) { while (ptr[i] + 1 < (int)adj[i][i - 1].size() && abs(adj[i][i - 1][ptr[i] + 1] - x) < abs(adj[i][i - 1][ptr[i]] - x)) ptr[i]++; sum += abs(x - adj[i][i - 1][ptr[i]]); } cout << sum << '\n'; } else { ll dist[n + 1], vis[n + 1]; for (int i = 0; i <= n; i++) { dist[i] = inf; vis[i] = 0; } ll sum = 0; dist[1] = 0; vis[1] = 1; for (int j = 2; j <= n; j++) { for (auto k : adj[1][j]) { dist[j] = min(dist[j], abs(k - x)); } } for (int i = 2; i <= n; i++) { ll mn = 1 + inf, pos = -1; for (int j = 1; j <= n; j++) { if (!vis[j] && dist[j] < mn) { pos = j; mn = dist[j]; } } // for (int j = 1; j <= n; j++) cout << dist[j] << " "; //cout << '\n'; vis[pos] = 1; sum += dist[pos]; for (int j = 1; j <= n; j++) { if (vis[j]) continue; for (auto k : adj[pos][j]) { dist[j] = min(dist[j], abs(k - x)); } } } //cout << '\n'; cout << sum << '\n'; } } }
#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...