Pagini recente » Cod sursa (job #3001107) | Cod sursa (job #1918913) | Cod sursa (job #937704) | Cod sursa (job #3221217) | Cod sursa (job #3188655)
#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();
}