이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
const int maxn = 2e5+10;
int n;
ll ans;
int tab[maxn][20], nivel[maxn];
int val[maxn];
vector<int> grafo[maxn];
map<pii, int> c1, c2;
void dfs(int u, int p)
{
for (auto v: grafo[u])
{
if (v != p)
{
nivel[v] = nivel[u]+1, tab[v][0] = u;
dfs(v, u);
}
}
}
void build(void)
{
for (int j = 1; j < 20; j++)
for (int i = 1; i <= n; i++)
tab[i][j] = tab[tab[i][j-1]][j-1];
}
int lca(int u, int v)
{
if (nivel[u] < nivel[v]) swap(u, v);
for (int i = 19; i >= 0; i--)
if (nivel[u]-(1<<i) >= nivel[v])
u = tab[u][i];
if (u == v) return u;
for (int i = 19; i >= 0; i--)
if (tab[u][i] && tab[v][i] && tab[u][i] != tab[v][i])
u = tab[u][i], v = tab[v][i];
return tab[u][0];
}
int solve(int u, int p)
{
int tot = val[u];
for (auto v: grafo[u])
if (v != p)
tot += solve(v, u);
if (u != 1)
{
if (1ll*tot*c1[{u, p}] > c2[{u, p}])
ans += 1ll*c2[{u, p}];
else
ans += 1ll*tot*c1[{u, p}];
}
return tot;
}
int main(void)
{
scanf("%d", &n);
for (int i = 1; i < n; i++)
{
int u, v, a, b;
scanf("%d %d %d %d", &u, &v, &a, &b);
grafo[u].push_back(v), grafo[v].push_back(u);
c1[{u, v}] = c1[{v, u}] = a, c2[{u, v}] = c2[{v, u}] = b;
}
dfs(1, 0); build();
for (int i = 1; i < n; i++)
{
val[i]++, val[i+1]++;
val[lca(i, i+1)] -= 2;
}
solve(1, 0);
printf("%lld\n", ans);
}
컴파일 시 표준 에러 (stderr) 메시지
putovanje.cpp: In function 'int main()':
putovanje.cpp:77:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
~~~~~^~~~~~~~~~
putovanje.cpp:82:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d %d", &u, &v, &a, &b);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |