Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <set>
- #include <algorithm>
- using namespace std;
- int n,m;
- int mi = 1000000000;
- vector <int> a, c;
- vector < pair <int, vector <int> > > v;
- bool cmp(pair<int, vector <int> > a, pair<int, vector <int> > b){
- return a.first < b.first;
- }
- void f(int counter, string is_taken){
- if (counter < m){
- f(counter + 1, is_taken + '0');
- f(counter + 1, is_taken + '1');
- }
- else{
- set <int> s;
- int cur_sum = 0;
- for(int i = 0; i < counter; ++i){
- if (is_taken[i] == '1'){
- cur_sum += v[i].first;
- for(int j = 0; j < v[i].second.size(); ++j){
- s.insert(v[i].second[j]);
- }
- }
- }
- for(int i = 0; i < n; ++i){
- if (s.find(a[i]) == s.end()){
- cur_sum += c[i];
- }
- }
- mi = min(cur_sum, mi);
- //for(auto it : s) cout << it << " ";
- //cout << endl;
- }
- }
- int main() {
- cin >> n;
- for(int i = 0, aa, cc; i < n; ++i){
- cin >> aa >> cc;
- a.push_back(aa);
- c.push_back(cc);
- }
- cin >> m;
- for(int i = 0, kk, cc; i < m; ++i){
- cin >> kk >> cc;
- vector <int> input(kk);
- for(int j = 0; j < kk; ++j){
- cin >> input[j];
- }
- v.push_back({cc, input});
- }
- f(0, "");
- cout << mi << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement