Submission #1299481

#TimeUsernameProblemLanguageResultExecution timeMemory
1299481KhanhDangAesthetic (NOI20_aesthetic)C++20
16 / 100
429 ms53888 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll, ll> #define pii pair<int, int> #define fi first #define se second #define all(v) (v).begin(), (v).end() #define Unique(v) sort(all(v)); (v).erase(unique(all(v)), (v).end()); const int N = 3e5 + 5; int n, m; int w[N], p[N]; vector<pii> adj[N]; ll d1[N], dn[N]; void Dijkstra(int s, ll dist[]) { priority_queue<pll, vector<pll>, greater<pll>> pq; dist[s] = 0; pq.push({0, s}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d != dist[u]) continue; for (auto [v, id] : adj[u]) { if (dist[v] > d + w[id]) { dist[v] = d + w[id]; pq.push({dist[v], v}); } } } } int par[N]; int findSet(int u) { return (u == par[u] ? u : par[u] = findSet(par[u])); } void UnionSet(int u, int v) { u = findSet(u); v = findSet(v); par[u] = v; } vector<pii> g[N]; bool mark[N]; int id; int low[N], num[N]; bool Dfs(int u, int p_id, ll len) { num[u] = low[u] = ++id; for (auto [v, i] : g[u]) { if (i == p_id) continue; if (!num[v]) { if (Dfs(v, i, len)) return true; low[u] = min(low[u], low[v]); if (low[v] == num[v]) { if (d1[u] + w[i] + p[i] + dn[v] > len && d1[v] + w[i] + p[i] + dn[u] > len) return true; } } else low[u] = min(low[u], num[v]); } return false; } bool check(ll len) { for (int i = 1; i <= n; i++) { par[i] = i; g[i].clear(); low[i] = num[i] = 0; } for (int i = 1; i <= m; i++) mark[i] = false; for (int u = 1; u <= n; u++) { for (auto [v, i] : adj[u]) { if (!mark[i] && (d1[u] + w[i] + dn[v] <= len || d1[v] + w[i] + dn[u] <= len)) { mark[i] = true; g[u].emplace_back(v, i); g[v].emplace_back(u, i); UnionSet(u, v); } } } if (findSet(1) != findSet(n)) return false; id = 0; return Dfs(1, -1, len); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "beautiful" if (fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } if (fopen("task.inp", "r")) { freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); } cin>>n>>m; for (int i = 1; i <= m; i++) { int u, v; cin>>u>>v>>w[i]; adj[u].emplace_back(v, i); adj[v].emplace_back(u, i); } for (int i = m; i >= 1; i--) p[i] = max(p[i + 1], w[i + 1]); memset(d1, 0x3f, sizeof d1); Dijkstra(1, d1); memset(dn, 0x3f, sizeof dn); Dijkstra(n, dn); ll l = d1[n]; ll r = l + p[1]; ll ans = d1[n] - 1; while (l <= r) { ll mid = (l + r) >> 1; if (check(mid)) { ans = mid; l = mid + 1; } else r = mid - 1; } cout<<ans + 1; cerr<<setprecision(3)<<fixed<<"Time elapsed: "<< 1.0 * clock() / CLOCKS_PER_SEC <<"s\n"; }

Compilation message (stderr)

Aesthetic.cpp: In function 'int main()':
Aesthetic.cpp:115:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  115 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Aesthetic.cpp:116:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  116 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Aesthetic.cpp:119:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  119 |         freopen("task.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Aesthetic.cpp:120:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  120 |         freopen("task.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...