题意:
n个数,k种划分, 问划分的集合种最大是多少, 输出他们的和,并输出每个数的种类
很简单的一个贪心小问题 排序得到最大的 k k <script type="math/tex" id="MathJax-Element-9">k</script>个值 记录位置 输出即可
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
const int MAXN = 2e5+10;
int in[MAXN], out[MAXN];
int ans[MAXN];
vector<int> G[MAXN];
int tot;
void dfs(int u) {
in[u] = ++tot;
ans[tot] = u;
for(int i = 0; i < G[u].size(); ++i) {
int v = G[u][i];
dfs(v);
}
out[u] = tot;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif // ONLINE_JUDGE
ios::sync_with_stdio(false);
tot = 0;
int n, q, x;
cin >> n >> q;
for(int i = 2; i <= n; i++) {
cin >> x;
G[x].pb(i);
}
dfs(1);
while(q--) {
int u, k;
cin >> u >> k;
if(out[u]-in[u]+1 < k)
cout << "-1\n";
else
cout << ans[in[u]+k-1] << endl;
}
return 0;
}