| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1361295 | eyadooz | Magic Tree (CEOI19_magictree) | C++20 | 80 ms | 49868 KiB |
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
#define endl '\n'
#define int long long
int w[200005], D[200005];
vector<int> adj[200005];
map<int, int> s[200005];
map<int, int> *dfs(int x, int p=-1)
{
map<int, int> *big=new map<int, int>();
for(auto i : adj[x])
{
if(i==p) continue;
map<int, int> *it=dfs(i, x);
if(sz(*it)>sz(*big)) swap(*it, *big);
for(auto f:*it) (*big)[f.first]+=f.second;
}
if(D[x]!=-1)
{
(*big)[D[x]]+=w[x];
int cur=w[x];
auto it=big->find(D[x]);
while(cur>0)
{
auto nxt=next(it);
if(next(it)==big->end()) break;
if(cur>=nxt->second)
{
cur-=nxt->second;
big->erase(nxt);
}
else
{
nxt->second-=cur;
cur=0;
}
}
}
return big;
}
main()
{
cin.tie(0) -> sync_with_stdio(0);
int n, m, k;
cin >> n >> m >> k;
for(int i = 2;i <= n;i++)
{
int x;
cin >> x;
adj[i].pb(x);
adj[x].pb(i);
}
for(int i = 0;i <= n;i++) D[i]=w[i]=-1;
for(int i = 0;i < m;i++)
{
int v, d, j;
cin >> v >> d >> j;
D[v]=d;
w[v]=j;
}
int ans=0;
for(auto[i, w]:*dfs(1)) ans+=w;
cout << ans;
} 컴파일 시 표준 에러 (stderr) 메시지
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
