Cod sursa(job #1710024)

Utilizator ubb_912codersUBB Badila Bereczki Bodea ubb_912coders Data 28 mai 2016 14:49:02
Problema Tribut Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 2.26 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(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";
	}
						
}