Submission #524852

#TimeUsernameProblemLanguageResultExecution timeMemory
524852qwerasdfzxclMountains and Valleys (CCO20_day1problem3)C++14
3 / 25
14 ms12768 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; struct Edge{ int v, w, i; Edge(){} Edge(int _v, int _w, int _i): v(_v), w(_w), i(_i) {} }; vector<Edge> adj[500500]; int on[2002000], W[2002000], dist[500500]; vector<Edge> E; vector<int> P; bool dfs0(int s, int e, int pa = -1){ if (s==e) return 1; for (auto &v:adj[s]) if (v.v!=pa && on[v.i]){ P.push_back(v.i); if (dfs0(v.v, e, s)) return 1; P.pop_back(); } return 0; } int cnt; void dfs(int s, int pa = -1, int w = 0){ cnt++; if (pa==-1) dist[s] = 0; else dist[s] = dist[pa] + w; for (auto &v:adj[s]) if (v.v!=pa && on[v.i]) dfs(v.v, s, v.w); } int cur = 0, ans = 1e9; void calc(int n){ cnt = 0; dfs(0); assert(cnt==n); cnt = 0; dfs(max_element(dist, dist+n)-dist); assert(cnt==n); ans = min(ans, cur*2 - *max_element(dist, dist+n)); } int main(){ int n, m; scanf("%d %d", &n, &m); for (int i=1;i<=m;i++){ int x, y, z; scanf("%d %d %d", &x, &y, &z); adj[x].emplace_back(y, z, i); adj[y].emplace_back(x, z, i); W[i] = z; if (z==1) on[i] = 1, cur++; else E.emplace_back(x, y, i); } calc(n); if (n>500) {printf("%d\n", ans); return 0;} for (auto &e:E){ P.clear(); dfs0(e.v, e.w); //printf("%d %d: ", e.v, e.w); //for (auto &x:P) printf("%d ", x); //printf("\n"); if ((int)P.size()<=W[e.i]) continue; on[e.i] = 1, cur += W[e.i]; for (auto &x:P){ on[x] = 0, cur -= W[x]; calc(n); on[x] = 1, cur += W[x]; } on[e.i] = 0, cur -= W[e.i]; } printf("%d\n", ans); return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:51:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |         scanf("%d %d %d", &x, &y, &z);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...