Submission #118236

#TimeUsernameProblemLanguageResultExecution timeMemory
118236songcDesignated Cities (JOI19_designated_cities)C++14
100 / 100
696 ms46860 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL, int> pii;

int N, Q;
vector<pii> G[202020], RG[202020];
int deg[202020];
bool chk[202020];
LL ans[202020], sum;

priority_queue<pii> PQ;

LL d(int u, int p){
    LL ret = 0;
    for (pii v : RG[u]) if (v.second != p) ret += d(v.second, u) + v.first;
    return ret;
}

void f(int u, int p){
    ans[1] = min(ans[1], sum);
    for (int i=0; i<(int)G[u].size(); i++){
        if (G[u][i].second == p) continue;
        sum -= RG[u][i].first;
        sum += G[u][i].first;
        f(G[u][i].second, u);
        sum += RG[u][i].first;
        sum -= G[u][i].first;
    }
}

int main(){
    int u, v;
    LL x, y;
    scanf("%d", &N);
    for (int i=1; i<N; i++){
        scanf("%d %d %lld %lld", &u, &v, &x, &y);
        G[u].push_back(pii(y, v));
        G[v].push_back(pii(x, u));
        RG[v].push_back(pii(y, u));
        RG[u].push_back(pii(x, v));
        deg[u]++, deg[v]++;
    }
    for (int i=1; i<=N; i++) if (deg[i] == 1) PQ.push(pii(-G[i][0].first, i));
    while (PQ.size()>2){
        pii T = PQ.top();
        PQ.pop();
        chk[T.second] = true;
        for (pii it : G[T.second]){
            if (!chk[it.second]){
                u = it.second;
                break;
            }
        }
        deg[u]--;
        if (deg[u] == 1){
            for (pii it : G[u]){
                if (!chk[it.second]){
                    PQ.push(pii(T.first-it.first, u));
                    break;
                }
            }
            continue;
        }
        ans[PQ.size()] = ans[PQ.size()+1] - T.first;
    }
    ans[1] = 1234567890123456ll;
    sum = d(1, 0);
    f(1, 0);
    scanf("%d", &Q);
    while (Q--){
        scanf("%d", &u);
        printf("%lld\n", ans[u]);
    }
    return 0;
}

Compilation message (stderr)

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:35:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &N);
     ~~~~~^~~~~~~~~~
designated_cities.cpp:37:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %lld %lld", &u, &v, &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &Q);
     ~~~~~^~~~~~~~~~
designated_cities.cpp:72:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &u);
         ~~~~~^~~~~~~~~~
#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...