UVA 7392 Bundles of Joy(乱搞)

来源:互联网 发布:淘宝和阿里巴巴哪个好 编辑:程序博客网 时间:2024/05/17 21:41

给定蛋糕店的蛋糕,问花最少的钱买所有的n个蛋糕

#include<bits/stdc++.h>using namespace std;typedef long long ll;struct node{ll dp;ll now;vector<int>v;vector<int>tree;};bool com(const node &x, const node &y){return x.v.size() < y.v.size();}int fa[500];node a[2000];void init(){memset(fa, -1, sizeof fa);for (int i = 0; i < 200; i++){a[i].dp = -1;a[i].v.clear();a[i].tree.clear();}}int main(){int T;cin >> T;while (T--){int n, m;init();scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)a[0].v.push_back(i);a[0].now = 999999999999;int cnt = 0;for (int i = 1; i <= m; i++){int x;scanf("%lld%d", &a[i].now, &x);for (int j = 0; j < x; j++){int y;scanf("%d", &y);a[i].v.push_back(y);}}sort(a, a + m + 1, com);for (int i = 0; i <= m; i++){node &z = a[i];set<int>ss;ll ans = 0; int flag = 0;for (int j = 0; j < z.v.size(); j++){if (fa[z.v[j]] == -1)flag = 1;else ss.insert(fa[z.v[j]]);fa[z.v[j]] = i;}set<int>::iterator po;for (po = ss.begin(); po != ss.end(); po++){z.tree.push_back(*po);ans += a[*po].dp;}if (!flag)z.dp = min(z.now, ans);else z.dp = z.now;}cout << a[m].dp << endl;}}





0 0