Cod sursa(job #1709590)

Utilizator TAKAUCV Ciurez Ehorovici Danciulescu TAKA Data 28 mai 2016 12:59:57
Problema Tribut Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.53 kb
#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];
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;
                for(int j=1;j<=n;++j)
                {
                    in>>r;
                    if(a[r]){

                        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() && a[x[i].second];++q)
            {
                int aux=min(t[d[x[i].second][q]],a[x[i].second]);
                ans+=aux;
                t[d[x[i].second][q]]-=aux;
                a[x[i].second]-=aux;
            }
        }
        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;
}