実現したいこと
コンストラクタの理解
前提
コンストラクタはstruct内の変数の初期化を行う部分だと思うのですが、下記コードQ(int k, int i):k(k),i(i) {} で具体的にどういう挙動になるのか、vector<vector<Q>> でどういういいことがあるのかを教えてほしいです。
pair以上の変数の組の配列を扱うのに便利なのかなという印象です
サンプル
ABC 239 E問題
snukeさんのコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) struct Q { int k, i; Q(int k, int i):k(k),i(i) {} }; int main() { int n, q; cin >> n >> q; vector<int> x(n); rep(i,n) cin >> x[i]; vector<vector<int>> to(n); rep(i,n-1) { int a, b; cin >> a >> b; --a; --b; to[a].push_back(b); to[b].push_back(a); } vector<vector<Q>> qs(n); rep(i,q) { int v, k; cin >> v >> k; --v; --k; qs[v].emplace_back(k,i); } vector<int> ans(q); const int K = 20; auto merge = [&](vector<int>& a, const vector<int>& b) { a.insert(a.end(), b.begin(), b.end()); sort(a.rbegin(), a.rend()); a.resize(K); return a; }; auto dfs = [&](auto f, int v, int p=-1) -> vector<int> { vector<int> res(K); res[0] = x[v]; for (int u : to[v]) { if (u == p) continue; auto d = f(f, u, v); merge(res,d); } for (auto [k,i] : qs[v]) { ans[i] = res[k]; } return res; }; dfs(dfs,0); rep(i,q) { printf("%d\n", ans[i]); } return 0; }
補足情報
説明がヘタダヨ~
これかな。
https://www.gocca.work/cpp-initialize-list/

回答1件
あなたの回答
tips
プレビュー