제출 #203078

#제출 시각아이디문제언어결과실행 시간메모리
203078dimash241Designated Cities (JOI19_designated_cities)C++17
100 / 100
551 ms54296 KiB
//#pragma GCC target("avx2") //#pragma GCC optimize("O3") //# include <x86intrin.h> # include <bits/stdc++.h> # include <ext/pb_ds/assoc_container.hpp> # include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template<typename T> using ordered_set = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define _USE_MATH_DEFINES_ #define ll long long #define ld long double #define Accepted 0 #define pb push_back #define mp make_pair #define sz(x) (int)(x.size()) #define every(x) x.begin(),x.end() #define F first #define S second #define lb lower_bound #define ub upper_bound #define For(i,x,y) for (ll i = x; i <= y; i ++) #define FOr(i,x,y) for (ll i = x; i >= y; i --) #define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0) // ROAD to... Red inline void Input_Output () { //freopen(".in", "r", stdin); //freopen(".out", "w", stdout); } const double eps = 0.000001; const ld pi = acos(-1); const int maxn = 1e7 + 9; const int mod = 1e9 + 7; const ll MOD = 1e18 + 9; const ll INF = 1e18 + 123; const int inf = 2e9 + 11; const int mxn = 1e6 + 9; const int N = 6e5 + 123; const int M = 22; const int pri = 997; const int Magic = 2101; const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, -1, 0, 1}; int n, m, k; using pt = pair<ll, ll>; vector < pair<int, pt > > g[N]; int deg[N]; ll ans[N], sum; ll d[N], up[N]; bool u[N]; void dfs(int v, int pr = 0) { for (auto e : g[v]) { if(e.F == pr) continue; d[e.F] = d[v] + e.S.F; up[e.F] = up[v] + e.S.S; sum += e.S.F; dfs(e.F, v); } } int main () { SpeedForce; cin >> n; for (int i = 1; i < n; i ++) { int l, r, x, y; cin >> l >> r >> x >> y; g[l].pb({r, {x, y}}); g[r].pb({l, {y, x}}); deg[l]++, deg[r]++; } set < pt > q; for (int i = 1; i <= n; i ++) if (deg[i] == 1) { q.insert({g[i][0].S.S, i}); } while(q.size() > 2) { int v = q.begin() -> S; ll cur = q.begin() -> F; u[v] = 1; q.erase(q.begin()); int par; for (auto e : g[v]) if (!u[e.F]) { par = e.F; break; } deg[par]--; if (deg[par] == 1) { for (auto e : g[par]) if (!u[e.F]) { q.insert({cur + e.S.S, par}); break; } continue; } ans[sz(q)] = ans[sz(q) + 1] + cur; } ans[1] = INF; dfs(1, 0); for (int i = 1; i <= n; ++i) { ans[1] = min(ans[1], sum - d[i] + up[i]); } cin >> m; for (int i = 1; i <= m; i ++) { int x; cin >> x; cout << ans[x] << '\n'; } return Accepted; } // B...a

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

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:94:7: warning: 'par' may be used uninitialized in this function [-Wmaybe-uninitialized]
   int par;
       ^~~
#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...