Pagini recente » Cod sursa (job #3219281) | Cod sursa (job #2268025) | Cod sursa (job #969541) | Cod sursa (job #2082548) | Cod sursa (job #387249)
Cod sursa(job #387249)
# 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]--;
}
int apare (int i, int j)
{
for (int k=1;k<=a[i][0];k++)
if (a[i][k]==j)
return 1;
return 0;
}
void rez (int k)
{
for (int i=1;i<=n;i++)
if (k!=i)
if (in[i] && !apare(k, 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;
}