제출 #817649

#제출 시각아이디문제언어결과실행 시간메모리
817649hariaakas646Regions (IOI09_regions)C++17
65 / 100
8080 ms77528 KiB
#include <bits/stdc++.h> using namespace std; #define scd(t) scanf("%d", &t) #define sclld(t) scanf("%lld", &t) #define forr(i, j, k) for (int i = j; i < k; i++) #define frange(i, j) forr(i, 0, j) #define all(cont) cont.begin(), cont.end() #define mp make_pair #define pb push_back #define f first #define s second typedef long long int lli; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<bool> vb; typedef vector<lli> vll; typedef vector<string> vs; typedef vector<pii> vii; typedef vector<vi> vvi; typedef map<int, int> mpii; typedef set<int> seti; typedef multiset<int> mseti; typedef long double ld; vvi reg, graph; vi regi; vi st, en; int timer = 0; void dfs(int x, int par, vll &vec) { vec[regi[x]]++; for (auto e : graph[x]) { if (e != par) { dfs(e, x, vec); } } } void euler(int x, int par) { st[x] = ++timer; for (auto e : graph[x]) { if (e != par) { euler(e, x); } } en[x] = timer; } int main() { int n, r, q; scd(n); scd(r); scd(q); int x = 400; reg = vvi(r + 1); regi = vi(n + 1); int h; scd(h); reg[h].pb(1); regi[1] = h; graph = vvi(n + 1); vi par(n + 1); forr(i, 2, n + 1) { int p, h; scd(p); scd(h); reg[h].pb(i); graph[i].pb(p); graph[p].pb(i); regi[i] = h; par[i] = p; } vector<vll> prec(r + 1); forr(i, 1, r + 1) { if (reg[i].size() > x) { vll out(n+1); for(auto e : reg[i]) dfs(e, par[e], out); prec[i] = out; } } st = en = vi(n + 1); vvi pos(r + 1); euler(1, 0); forr(i, 1, r + 1) { for (auto e : reg[i]) { pos[i].pb(st[e]); } sort(all(pos[i])); // printf("%d\n", i); // for(auto e : pos[i]) printf("%d ", e); // printf("\n"); } frange(_, q) { int a, b; scd(a); scd(b); if (reg[a].size() > x) { printf("%lld\n", prec[a][b]); fflush(stdout); } else { lli tot = 0; for (auto e : reg[a]) { tot += upper_bound(all(pos[b]), en[e]) - lower_bound(all(pos[b]), st[e]); // printf("%d %d %lld\n", st[e], en[e], tot); } printf("%lld\n", tot); fflush(stdout); } } }

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

regions.cpp: In function 'int main()':
regions.cpp:89:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   89 |         if (reg[i].size() > x)
      |             ~~~~~~~~~~~~~~^~~
regions.cpp:117:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  117 |         if (reg[a].size() > x)
      |             ~~~~~~~~~~~~~~^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:60:5: note: in expansion of macro 'scd'
   60 |     scd(n);
      |     ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:61:5: note: in expansion of macro 'scd'
   61 |     scd(r);
      |     ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:62:5: note: in expansion of macro 'scd'
   62 |     scd(q);
      |     ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:67:5: note: in expansion of macro 'scd'
   67 |     scd(h);
      |     ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:76:9: note: in expansion of macro 'scd'
   76 |         scd(p);
      |         ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:77:9: note: in expansion of macro 'scd'
   77 |         scd(h);
      |         ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:115:9: note: in expansion of macro 'scd'
  115 |         scd(a);
      |         ^~~
regions.cpp:5:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    5 | #define scd(t) scanf("%d", &t)
      |                ~~~~~^~~~~~~~~~
regions.cpp:116:9: note: in expansion of macro 'scd'
  116 |         scd(b);
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...