제출 #1332418

#제출 시각아이디문제언어결과실행 시간메모리
1332418nathjess공장들 (JOI14_factories)C++20
15 / 100
2599 ms17276 KiB
# include "factories.h"
# include <bits/stdc++.h>
# define ll long long 
# define vi vector<int>
# define pb push_back
# define pii pair<int, int>
# define fi first
# define se second

using namespace std;

int n, a[500005], b[500005], d[500005];
ll dist[2][5005], ans;
vector<pii> adj[5005];
set<int> A, B;

void dfs(int x, int p) {
  dist[0][x]=1e14;
  dist[1][x]=1e14;
  if(A.count(x)) dist[0][x]=0;
  if(B.count(x)) dist[1][x]=0;
  for(auto i : adj[x]) {
    if(i.fi==p) continue;
    dfs(i.fi, x);
    dist[0][x]=min(dist[0][x], dist[0][i.fi]+i.se);
    dist[1][x]=min(dist[1][x], dist[1][i.fi]+i.se);
  }
  // cout << "cur " << x << " : " << dist[0][x] << " " << dist[1][x] << endl;
  ans=min(ans, dist[0][x]+dist[1][x]);
}

void Init(int N, int A[], int B[], int D[]) {
  n=N;
  for(int i=1; i<n; i++) a[i]=A[i-1], b[i]=B[i-1], d[i]=D[i-1];
  for(int i=1; i<n; i++) {
    adj[a[i]].pb({b[i], d[i]});
    adj[b[i]].pb({a[i], d[i]});
  }
}

long long Query(int S, int X[], int T, int Y[]) {
  A.clear();
  B.clear();
  for(int i=0; i<S; i++) A.insert(X[i]);
  for(int i=0; i<T; i++) B.insert(Y[i]);
  ans=1e14;
  dfs(0, -1);
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...