Pagini recente » Cod sursa (job #2591768) | Cod sursa (job #816170) | Cod sursa (job #620546) | Cod sursa (job #2076159) | Cod sursa (job #1709845)
#include<bits/stdc++.h>
using namespace std;
ifstream in("tribut.in");
ofstream out("tribut.out");
int a[110],t[110],T,N,M,P,n,s,r,ans;
pair<int,int>x[110];
pair<int,int>v[110];
pair<int,int>y[110];
vector<int> d[110];
int main()
{
in>>T;
while(T--)
{
in>>N>>M;
for(int i=1;i<=N;++i)
in>>a[i];
for(int i=1;i<=M;++i)
{
in>>n>>P;
if(P){
t[++s]=P;
v[s].second=s;
for(int j=1;j<=n;++j)
{
in>>r;
if(a[r]){
++v[s].first;
d[r].push_back(s);
++x[r].first;
x[r].second=r;
}
}
}
else
{
for(int j=1;j<=n;++j)
in>>r;
}
}
sort(x+1,x+N+1);
int z=1;
while(!x[z].first)
{
z++;
}
for(int i=z;i<=N;++i)
{
for(int q=0;q<d[x[i].second].size();++q)
{
y[d[x[i].second][q]].second=v[d[x[i].second][q]].second;
y[d[x[i].second][q]].first=v[d[x[i].second][q]].first;
}
sort(y+1,y+N+1);
int poz=1;
while(!y[poz].first)
++poz;
for(int q=poz;q<=N && a[x[i].second];++q)
{
int aux=min(y[q].first,a[x[i].second]);
ans+=aux;
t[y[q].second]-=aux;
a[x[i].second]-=aux;
}
memset(y,0,sizeof(y));
}
out<<ans << '\n';
ans = 0;
memset(a, 0, sizeof(a));
memset(t, 0, sizeof(t));
memset(x, 0 , sizeof(x));
s = 0;
for(int i = 1; i <= N; i ++)
{
d[i].clear();
}
}
return 0;
}