이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int int64_t
using namespace std;
vector<vector<int>>graph, dgraph;
vector<unordered_map<int, int>>col;
vector<int>ans, tot, par;
int n, m, k;
void direct(int v, int p){
par[v] = p;
for(auto u: graph[v]){
if(u != p) direct(u, v);
}
}
void dfs(int v){
for(auto u: dgraph[v]){
dfs(u);
if(col[u].size() > col[v].size()) swap(col[u], col[v]);
for(auto [key, val] : col[u]){
col[v][key] += val;
if(col[v][key] == tot[key]){
//cout<<"helloo "<<key<<" "<<v<<endl;
col[v].erase(key);
}
}
}
//cout<<"v "<<v<<endl;
//for(auto [key, val]: col[v]) cout<<key<<" "<<val<<endl;
//cout<<endl;
if(col[v].size() >= k) ans[v] = 1;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//ifstream cin ("input.in");
//ofstream cout ("output.out");
cin>>n>>m>>k;
graph.assign(n, vector<int>());
col.assign(n, unordered_map<int, int>());
ans.assign(n, 0);
par.assign(n, 0);
vector<pair<int, int>>input;
for(int i = 0; i<n-1; ++i){
int a, b; cin>>a>>b;
--a; --b;
graph[a].push_back(b);
graph[b].push_back(a);
input.push_back({a, b});
}
direct(0, 0);
dgraph.assign(n, vector<int>());
for(int i = 0; i<n; ++i){
if(par[i] != i) dgraph[par[i]].push_back(i);
}
tot.assign(m, 0);
for(int i = 0; i<m; ++i){
int s; cin>>s;
tot[i] = s;
for(int j = 0; j<s; ++j){
int a; cin>>a;
--a;
++col[a][i];
}
}
//for(auto u: tot) cout<<u<<" ";
//cout<<endl;
/*
for(auto u: col){
for(auto [key, val]: u) cout<<key<<" "<<val<<endl;
cout<<endl;
}
*/
dfs(0);
vector<int>fred;
for(int i = 0; i<n-1; ++i){
int a = input[i].first;
int b = input[i].second;
if(par[a] == b && ans[a]) fred.push_back(i+1);
else if(par[b] == a && ans[b]) fred.push_back(i+1);
}
cout<<fred.size()<<'\n';
for(auto u: fred) cout<<u<<" ";
cout<<'\n';
}
컴파일 시 표준 에러 (stderr) 메시지
railway.cpp: In function 'void dfs(int64_t)':
railway.cpp:22:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
22 | for(auto [key, val] : col[u]){
| ^
railway.cpp:33:19: warning: comparison of integer expressions of different signedness: 'std::unordered_map<long int, long int>::size_type' {aka 'long unsigned int'} and 'int64_t' {aka 'long int'} [-Wsign-compare]
33 | if(col[v].size() >= k) ans[v] = 1;
| ~~~~~~~~~~~~~~^~~~
# | 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... |