Cod sursa(job #387247)

Utilizator loginLogin Iustin Anca login Data 27 ianuarie 2010 09:47:36
Problema Taramul Nicaieri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
# include <cstdio>
# include <fstream>
# include <cstdlib>
using namespace std;
int *a[103], n, m, in[103], out[103];

void read ()
{
	ifstream fin ("harta.in");
	fin>>n;
	for (int i=1;i<=n;i++)
	{
		a[i]=(int *) malloc (4);
		a[i][0]=0;
	}
	for (int i=1;i<=n;i++)
	{
		fin>>out[i]>>in[i];
		m+=out[i];
		for (int j=1;j<=out[i];j++)
			a[i]=(int *) realloc(a[i], (a[i][0]+j+1)*4);
	}
}

void leaga (int i, int j)
{
	a[i][++a[i][0]]=j;
	out[i]--;
	in[j]--;
}

void rez (int k)
{
	for (int i=1;i<=n;i++)
		if (k!=i)
			if (in[i])
			{
				leaga(k, i);
				if (out[i])
					rez(i);
			}
}

void write ()
{
	freopen ("harta.out", "w", stdout);
	printf("%d\n", m);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=a[i][0];j++)
			printf("%d %d\n", i, a[i][j]);
}

int main ()
{
	read ();
	for (int i=1;i<=n;i++)
		if (out[i])
			rez (i);
	write ();
	return 0;
}