Cod sursa(job #180065)

Utilizator scvalexAlexandru Scvortov scvalex Data 16 aprilie 2008 16:44:16
Problema Taramul Nicaieri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int N,
    in[100],
    out[100];
vector<int> v[100];

int main(int argc, char *argv[]) 
{
	FILE *fi = fopen("harta.in", "r");
	fscanf(fi, "%d", &N);
	int tot(0);
	for (int i(0); i < N; ++i) {
		fscanf(fi, "%d %d", out+i, in+i);
		tot += out[i];
	}
	fclose(fi);

	FILE *fo = fopen("harta.out", "w");
	fprintf(fo, "%d\n", tot);

	for (int i(0); i < N; ++i) {
		for (int j(0); j < N; ++j)
			v[j].clear();
		for (int j(0); j < N; ++j)
			if ((in[j] > 0) && (i != j)) {
				v[in[j]].push_back(j);
			}
		for (int j = N-1; j >= 0; --j)
			while (v[j].size() > 0) {
				if (out[i] == 0)
					break;
				int aux = v[j].back();
				fprintf(fo, "%d %d\n", i + 1, aux + 1);
				--in[aux];
				--out[i];
				v[j].pop_back();
			}
	}
	fclose(fo);

	return 0;
}