Pagini recente » Cod sursa (job #3275535) | Cod sursa (job #3238799) | Cod sursa (job #1776403) | Cod sursa (job #1390385) | Cod sursa (job #3306580)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("harta.in");
ofstream fout("harta.out");
const int NMAX = 101;
int n, out[NMAX], in[NMAX];
bool drum[NMAX][NMAX];
vector<pair<int, int>> drumuri;
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> out[i] >> in[i];
fout << accumulate(out + 1, out + n + 1, 0) << "\n";
while(true)
{
int sursa = -1;
for(int i = 1; i <= n; i++)
{
if(out[i] > 0)
{
sursa = i;
break;
}
}
if(sursa == -1)
break;
priority_queue<pair<int, int>> pq;
for(int dest = 1; dest <= n; dest++)
if(dest != sursa && in[dest] > 0 && !drum[sursa][dest])
pq.push({in[dest], dest});
bool found = false;
while(!pq.empty() && !found)
{
auto [in_deg, dest] = pq.top();
pq.pop();
drumuri.emplace_back(sursa, dest);
drum[sursa][dest] = true;
out[sursa]--;
in[dest]--;
found = true;
}
}
for(auto [u, v] : drumuri)
fout << u << " " << v << "\n";
fin.close();
fout.close();
return 0;
}