제출 #524841

#제출 시각아이디문제언어결과실행 시간메모리
524841qwerasdfzxclMountains and Valleys (CCO20_day1problem3)C++14
1 / 25
7062 ms12868 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; } void dfs(int s, int pa = -1, int w = 0){ 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){ dfs(0); dfs(max_element(dist, dist+n)-dist); 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); 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; }

컴파일 시 표준 에러 (stderr) 메시지

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