Pagini recente » Cod sursa (job #2837443) | Cod sursa (job #2093282) | Cod sursa (job #1512417) | Cod sursa (job #1491451) | Cod sursa (job #1710024)
#include <fstream>
#include <set>
using namespace std;
int t, n, m, j, B, p[501], tr[501], tribut[501], a, i, sumAct, sT, maxim, q;
int gata[501];
set<int> st[501];
set<int>::iterator it1, it2;
int main()
{
ifstream f("tribut.in");
ofstream g("tribut.out");
f>>t;
for(B=1; B<=t; B++)
{
sT=0;
f>>n>>m;
for(j=1; j<=n; j++)
{
f>>tribut[j];
}
for(j=1; j<=m; j++)
{
f>>p[j]>>tr[j];
for(q=1; q<=p[j]; q++)
{
f>>a;
st[j].insert(a);
}
}
for(i=1; i<=m; i++)
{
for(j=i+1; j<=m; j++)
{
if(tr[i]<tr[j])
{
set<int> auxs;
int aux1, aux2;
auxs=st[i];
st[i]=st[j];
st[j]=auxs;
aux1=tr[i];
tr[i]=tr[j];
tr[j]=aux1;
aux2=p[i];
p[i]=p[j];
p[j]=aux2;
}
}
}
/*for(i=1; i<=m; i++)
{
for(it1=st[i].begin(); it1!=st[i].end(); it1++)
{
int ok=0;
for(j=1; j<=m; j++)
{
if(i==j)
continue;
for(it2=st[j].begin(); it2!=st[j].end(); it2++)
{
if((*it1)==(*it2))
{
ok=1;
//set<int>::iterator it3=it2;
//it2--;
//st[j].erase(it3);
}
}
}
if(ok==0)
{
gata[(*it1)]=1;
sumAct=min(tr[i], tribut[(*it1)]);
tr[i]-=sumAct;
sT+=sumAct;
}
}
}*/
for(i=1; i<=n; i++)
{
int cnt=0;
for(j=1; j<=m; j++)
{
for(it1=st[j].begin(); it1!=st[j].end(); it1++)
{
if((*it1)==i)
cnt++;
}
}
if(cnt==1)
{
gata[(*it1)]=1;
sumAct=min(tr[i], tribut[(*it1)]);
tr[i]-=sumAct;
sT+=sumAct;
}
}
int ales;
for(i=1; i<=n; i++)
{
if(!gata[i])
{
maxim=0;
ales=0;
for(j=1; j<=m; j++)
{
for(it1=st[j].begin(); it1!=st[j].end(); it1++)
{
if((*it1)==i)
{
if(maxim<min(tr[j], tribut[i]))
{
maxim=min(tr[j], tribut[i]);
ales=j;
}
}
}
}
tr[ales]-=maxim;
sT+=maxim;
}
gata[i]=0;
}
/*
for(j=1; j<=m; j++)
{
for(it1=st[j].begin(); it1!=st[j].end(); it1++)
{
if(!gata[(*it1)])
{
sumAct=min(tr[j], tribut[(*it1)]);
tr[j]-=sumAct;
sT+=sumAct;
tribut[(*it1)]-=sumAct;
}
}
}
*/
g<<sT<<"\n";
}
}