제출 #625075

#제출 시각아이디문제언어결과실행 시간메모리
625075ArnchDesignated Cities (JOI19_designated_cities)C++17
6 / 100
35 ms48096 KiB
// oooo /* har chi delet mikhad bebar ~ gitar o ba khodet nabar! ~ ;Amoo_Hasan; */ #include<bits/stdc++.h> //#pragma GCC optimize("O3,no-stack-protector,unroll-loops") //#pragma GCC target("avx2,fma") using namespace std; typedef long long ll; typedef long double ld; #define Sz(x) int((x).size()) #define All(x) (x).begin(), (x).end() #define wtf(x) cout<<#x <<" : " <<x <<endl constexpr ll inf = 1e18, N = 1e6 + 10, mod = 1e9 + 7, pr = 1000696969; ll sum, ans, total; ll dp[N], ans_t[N]; bool vis[N]; vector<pair<ll, ll> > adj[N]; /* 1 -> pain 0 -> bala */ void preDFS(int x, int p = 0) { dp[x] = vis[x]; for(auto j : adj[x]) { if(j.first == p) { continue; } preDFS(j.first, x); dp[x] += dp[j.first]; } } void mainDFS(int x, int p = 0, int val = 0) { if(dp[x] > 0) { ans += val; } for(auto j : adj[x]) { if(j.first == p) { if(dp[x] < total) { ans += j.second; } continue; } mainDFS(j.first, x, j.second); } } int main() { ios :: sync_with_stdio(0), cin.tie(0); int n, q; cin >>n; assert(n <= 16); for(int i = 0; i < n - 1; i++) { int u, v, c, d; cin >>u >>v >>c >>d; adj[u].push_back({v, c}), adj[v].push_back({u, d}); sum += c, sum += d; } for(int mask = 0; mask < (1 << n); mask++) { for(int i = 0; i < n; i++) { if((mask >> i) & 1) { vis[i + 1] = 1; } } ans = 0; total = __builtin_popcount(mask); preDFS(1); mainDFS(1); ans_t[total] = max(ans_t[total], ans); for(int i = 0; i < n; i++) { if((mask >> i) & 1) { vis[i + 1] = 0; } } } cin >>q; for(int i = 0; i < q; i++) { int t; cin >>t; cout<<sum - ans_t[t] <<endl; } return 0; }
#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...