Cod sursa(job #1444525)

Utilizator obidanDan Ganea obidan Data 29 mai 2015 21:05:16
Problema Taramul Nicaieri Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.06 kb
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;

const int NMAX = 105;
int inG[NMAX],outG[NMAX];
int m[NMAX *NMAX][NMAX];
int main()
{
    int x,y,n;
    ifstream in("harta.in");
    ofstream out("harta.out");
    in>>n;
    int number = 0;
    for(int i = 1 ;i <= n; ++i)
    {
        in>>x>>y;
        outG[i] = x;
        inG[i] = y;
        number+=outG[i];
    }
    out<<number<<"\n";

    for(int i = 1 ; i <= n; ++i)
    {
        //int nr[NMAX];
        vector <int> nr(n + 1, 0);

        for(int j = 1 ; j <= n; ++j)
        {
            if(i!=j && inG[j])
            {
                m[inG[j]][++nr[inG[j]]] = j;
            }
        }
        for(int j = n; j > 0; --j)
        {
            // && nr[j] adica am noduri  in care am j intrari
            // incepi descrescator!
            while(outG[i] && nr[j])
            {
                int to = m[j][nr[j]--];
                outG[i]--;
                inG[to]--;
                out<<i<<" "<<to<<"\n";
            }
        }
    }
}