Cod sursa(job #3188655)

Utilizator Catalin12Cata Caraulasu Catalin12 Data 3 ianuarie 2024 17:02:24
Problema Taramul Nicaieri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <algorithm>
#include <climits>
using namespace std;
ifstream fin("harta.in");
ofstream fout("harta.out");



class Solution
{
public:
    void taramul_nicaieri()
    {

        int n;
        fin >> n;
        vector<int> in (n + 1);
        vector<int> out (n + 1);
        int roads = 0;
        for(int i = 1; i <= n; i++)
        {
            fin >> out[i] >> in[i];
            roads += out[i];
        }

        fout << roads << '\n';

        for(int i = 1; i <= n; ++i)
        {
            vector<pair<int, int>> v;
            for(int j = 1; j <= n; j++)
                v.push_back({in[j], j});

            sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) ///sort after in degree for each iteration
            {
                if(a.first == b.first)
                    return a.second > b.second;
                return a.first > b.first;
            });
            for(int j = 0 ; j < n && out[i] ; j++)
                if(v[j].second != i) /// if we have different nodes
                {
                    fout << i << ' ' << v[j].second << '\n';
                    out[i]--;
                    in[v[j].second]--;

                }

        }

    }



};

int main()
{
    Solution a;
    a.taramul_nicaieri();

}