제출 #1337321

#제출 시각아이디문제언어결과실행 시간메모리
1337321mtilord공장들 (JOI14_factories)C++20
0 / 100
6 ms588 KiB
#include "factories.h"
#include <bits/stdc++.h>
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#define ll long long
#define endl '\n'
#define pb push_back
#define fi first
#define se second
#define pii pair<int, int>
using namespace std;

vector<pii> mas[500001];
int kr[500001];
ll best;
//vector<int> eil[5e5];
//int tin[5e5], tout[5e5], t=0;
//void dfs(int v, int p)
//{
//    tin[v]=++t;
//    eil.pb(v);
//    for(auto x:mas[v])
//        if(x.fi!=p)
//            dfs(x.fi, v);
//    tout[v]=++t;
//    eil.pb(v);
//}

pair<ll, ll> dfs(int v, int p)
{
    ll dp1, dp2;
    if(kr[v]==1)
        dp1=0;
    else if(kr[v]==2)
        dp2=0;
    for(auto x:mas[v])
    {
        if(x.fi==p)
            continue;
        auto u=dfs(x.fi, v);
        dp1=min(dp1, u.fi+x.se);
        dp2=min(dp2, u.se+x.se);
    }
    best=min(best, dp1+dp2);
    return {dp1, dp2};
}

void Init(int N, int A[], int B[], int D[]) {
    for(int i=0; i<N; i++)
    {
        mas[A[i]].pb({B[i], D[i]});
        mas[B[i]].pb({A[i], D[i]});
    }
}

long long Query(int S, int X[], int T, int Y[]) {

//    eil.clear();
//    dfs(1, 1);
    for(int i=0; i<S; i++)
        kr[X[i]]=1;
    for(int i=0; i<T; i++)
        kr[Y[i]]=2;
    best=INT_MAX;
    dfs(0, 0);
    for(int i=0; i<S; i++)
        kr[X[i]]=0;
    for(int i=0; i<T; i++)
        kr[Y[i]]=0;
    return best;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...