# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
172721 | Ruxandra985 | Fireworks (APIO16_fireworks) | C++14 | 15 ms | 7544 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define DIMN 300010
using namespace std;
vector <pair <int,int> > v[DIMN];
pair <int,int> sol[DIMN];
int sum[DIMN] , n , m;
int modul (int x){
if (x > 0)
return x;
return -x;
}
void dfs (int nod){
int i , vecin , s , val1 , val2;
for (i=0;i<v[nod].size();i++){
vecin = v[nod][i].first;
sum[nod] += v[nod][i].second;
dfs(vecin);
}
if (nod > n){ /// e exploziv
sol[nod] = make_pair(0 , sum[nod]); /// 0 e timpul si sum[nod] e costul
}
else { /// e doar punct de intersectie
s = 0;
for (i=0;i<v[nod].size();i++){
vecin = v[nod][i].first;
s += v[nod][i].second + sol[vecin].first;
}
/// vezi daca e mai ok s sau s + 1
s/=v[nod].size();
val1 = val2 = 0;
for (i=0;i<v[nod].size();i++){
vecin = v[nod][i].first;
val1 += sol[vecin].second + modul (s - sol[vecin].first - v[nod][i].second);
val2 += sol[vecin].second + modul (s+1 - sol[vecin].first - v[nod][i].second);
}
if (val1 <= val2){
sol[nod] = make_pair(s , val1);
}
else sol[nod] = make_pair(s+1 , val2);
}
}
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int tot , i , x , y;
fscanf (fin,"%d%d",&n,&m);
tot = n + m;
for (i=2;i<=tot;i++){
fscanf (fin,"%d%d",&x,&y);
v[x].push_back(make_pair(i,y));
}
dfs(1);
fprintf (fout,"%d",sol[1].second);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |