Cod sursa(job #1709922)

Utilizator ubb_912codersUBB Badila Bereczki Bodea ubb_912coders Data 28 mai 2016 14:25:48
Problema Tribut Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.2 kb
#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(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;
				}
			}
				if(ok==0)
				{
					gata[(*it1)]=1;
					sumAct=min(tr[i], tribut[(*it1)]);
					tr[i]-=sumAct;
					sT+=sumAct;
				}
		}
	}
	for(i=1; i<=n; i++)
	{
		if(!gata[i])
		{
			maxim=0;
			for(j=1; j<=m; j++)
			{
				for(it1=st[j].begin(); it1!=st[j].end(); it1++)
				{
					if((*it1)==i)
					{
						maxim=max(maxim, min(tr[j], tribut[i]));
					}
				}
			}
			sT+=maxim;
		}
		gata[i]=0;
	}
	g<<sT<<"\n";
	}
						
}