#include <bits/stdc++.h>using namespace std;const int inf = 0X3f3f3f3f;
int vote[110],num[110];
int val[110];
bool vis[110];
bool tmp(int x, int y)
{return val[x] < val[y];
}
int main()
{int sum;scanf("%d", &sum);while(sum --){int n;memset(num, 0, sizeof(num));scanf("%d", &n);for(int i = 2; i <= n; i ++){scanf("%d", &vote[i]);num[vote[i]] ++;}for(int i = 2; i <= n; i ++){scanf("%d", &val[i]);}int Min = inf;int cost;int nownum;for(int i = max(1, num[1]); i < n; i ++){memset(vis, false, sizeof(vis));cost = 0;nownum = num[1];for(int j = 2; j <= n; j ++){if(num[j] >= i){int shu[110];int cnt = 0;int len = num[j] - i + 1;for(int z = 2; z <= n; z ++){if(vote[z] == j){shu[cnt ++] = z;}}sort(shu, shu + cnt, tmp);for(int z = 0; z < len; z ++){//cout << shu[z] << endl;cost += val[shu[z]];vis[shu[z]] = true;nownum ++;}}}if(nownum > i) continue;int len = i - nownum;//cout << len << endl;int shu[110];int cnt = 0;for(int j = 2; j <= n; j ++){if(!vis[j] && vote[j] != 1){shu[cnt ++] = j;}}sort(shu, shu + cnt, tmp);for(int j = 0; j < len; j ++){cost += val[shu[j]];// cout << shu[j] << endl;}Min = min(cost, Min);}cout << Min <<endl;}return 0;
}
本文发布于:2024-01-27 16:37:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063446561464.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |