제출 #47690

#제출 시각아이디문제언어결과실행 시간메모리
47690E869120Fireworks (APIO16_fireworks)C++14
55 / 100
2101 ms373772 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #pragma warning (disable: 4996) long long N, M, A[300009], B[300009], dist[300009], sum; vector<pair<long long, long long>>x[300009]; vector<long long>G[300009]; void dfs1(int pos, long long depth) { dist[pos] = depth; for (int i = 0; i < x[pos].size(); i++) dfs1(x[pos][i].first, depth + x[pos][i].second); } void dfs2(int pos) { if (x[pos].size() == 0) { G[pos].push_back(dist[pos]); G[pos].push_back(dist[pos]); return; } for (int i = 0; i < x[pos].size(); i++) dfs2(x[pos][i].first); for (int i = 0; i < x[pos].size(); i++) { for (int j = 0; j < G[x[pos][i].first].size(); j++) G[pos].push_back(G[x[pos][i].first][j]); } sort(G[pos].begin(), G[pos].end()); vector<long long>H; for (int i = 0; i < (int)G[pos].size() - (int)x[pos].size() + 1; i++) H.push_back(G[pos][i]); G[pos] = H; for (int i = 0; i < (int)G[pos].size() - 2; i++) G[pos][i] -= B[pos]; } int main() { cin >> N >> M; for (int i = 2; i <= N + M; i++) { scanf("%lld%lld", &A[i], &B[i]); sum += B[i]; x[A[i]].push_back(make_pair(i, B[i])); } dfs1(1, 0); dfs2(1); long long ret = sum, cx = 0, D = G[1].size() - 1; for (int i = 0; i < G[1].size() - 1; i++) { ret -= (G[1][i] - cx)*D; cx = G[1][i]; D--; } cout << ret << endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

fireworks.cpp:5:0: warning: ignoring #pragma warning  [-Wunknown-pragmas]
 #pragma warning (disable: 4996)
 
fireworks.cpp: In function 'void dfs1(int, long long int)':
fireworks.cpp:12:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x[pos].size(); i++) dfs1(x[pos][i].first, depth + x[pos][i].second);
                  ~~^~~~~~~~~~~~~~~
fireworks.cpp: In function 'void dfs2(int)':
fireworks.cpp:17:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x[pos].size(); i++) dfs2(x[pos][i].first);
                  ~~^~~~~~~~~~~~~~~
fireworks.cpp:19:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x[pos].size(); i++) {
                  ~~^~~~~~~~~~~~~~~
fireworks.cpp:20:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < G[x[pos][i].first].size(); j++) G[pos].push_back(G[x[pos][i].first][j]);
                   ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
fireworks.cpp: In function 'int main()':
fireworks.cpp:38:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < G[1].size() - 1; i++) { ret -= (G[1][i] - cx)*D; cx = G[1][i]; D--; }
                  ~~^~~~~~~~~~~~~~~~~
fireworks.cpp:32:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld", &A[i], &B[i]); sum += B[i];
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...