이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 12, MOD = (int)1e9 + 7;
int n, s[N], m, k, res[N], val[N];
vector<pair<int,int>> g[N];
vector<int> c[N];
map<int,int> col[N];
void dfs(int v, int pr = -1, int pid = 0) {
int f = 0;
for(auto [to,i]:g[v]) {
if(to == pr) continue;
dfs(to, v, i);
if((int)col[to].size() > (int)col[v].size()) {
swap(f,res[i]);
col[to].swap(col[v]);
}
for(auto [x,y]:col[to]) {
if(!col[v].count(x)) {
f++;
}
col[v][x] += y;
if(col[v][x] == s[x]) {
f--;
}
}
}
for(auto j:c[v]) {
col[v][j]++;
if(col[v][j] == 1) {
f++;
}
if(col[v][j] == s[j]) {
f--;
}
}
val[pid] = res[pid] = f;
}
void test() {
cin >> n >> m >> k;
for(int i = 1; i <= n - 1; i++) {
int a, b;
cin >> a >> b;
g[a].push_back({b,i});
g[b].push_back({a,i});
}
for(int i = 1; i <= m; i++) {
cin >> s[i];
for(int j = 0; j < s[i]; j++) {
int x;
cin >> x;
if((int)c[x].size() && c[x].back() == i) continue;
c[x].push_back(i);
}
}
dfs(1);
vector<int> ans;
for(int i = 1; i <= n - 1; i++) {
// cout << i << ' ' << res[i] << '\n';
if(val[i] >= k) {
ans.push_back(i);
}
}
cout << (int)ans.size() << '\n';
for(auto i:ans) {
cout << i << ' ';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while(t--)
test();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |