이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
struct Arc {int v;int d;};
vector <Arc> gr[200000];
long long dist[400001];
long long d;
int nd;
bool fix[200000];
void dfs (int u) {
fix[u] = 1;
for (int i = 0; i < (int)gr[u].size(); i++) {
int v = gr[u][i].v;
if (!fix[v]) {
nd++;
d+=gr[u][i].d;
dist[nd] = d;
dfs(v);
d-=gr[u][i].d;
}
}
}
int max_score(int N, int X, int Y, long long K,
std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
Arc tmp;
for (int i = 0; i < N; i++) {
gr[i].clear();
fix[i] = 0;
}
for (int i = 0; i <= 2*N; i++) {
dist[i] = 0;
}
for (int i = 0; i < N; i++) {
tmp.v=V[i];
tmp.d = W[i];
gr[U[i]].push_back(tmp);
tmp.v=U[i];
gr[V[i]].push_back(tmp);
}
d = 0;
nd = 0;
dist[0] = 0;
dfs(X);
for (int i = 0; i < N; i++) {
fix[i] = 0;
}
d = 0;
nd++;
dist[nd] = 0;
dfs(Y);
sort(dist,dist+nd+1);
int ans = 0; long long sum = 0;
for (int i = 0; i < 2*N; i++) {
if (sum + dist[i] > K) {
break;
} else {
sum += dist[i];
ans++;
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |