Pagini recente » Cod sursa (job #1255713) | Cod sursa (job #294649) | Cod sursa (job #2272230) | Cod sursa (job #1744008) | Cod sursa (job #2420382)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
const int kNmax = 1005;
class Task {
public:
void show() {
read_input();
solve();
}
private:
int n;
int count = 0;
int plecare[kNmax];
int intoarcere[kNmax];
vector<int> q[kNmax];
int l[kNmax][kNmax];
void read_input() {
ifstream fin("in");
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> plecare[i];
fin >> intoarcere[i];
count += plecare[i];
}
fin.close();
}
void solve() {
ofstream fout("out")
fout << count << "\n";
int i, j, k, ok;
for (i = 1; i <= n; i++) {
memset(q, 0, sizeof(q));
for (j = 1; j <= n; j++) {
if (intoarcere[j] && i != j) {
l[intoarcere[j]][++q[intoarcere[j]]] = j;
}
}
for (j = n ; j && plecare[i]; j--) {
for (k = q[j]; k && plecare[i]; k--) {
ok = l[j][k];
plecare[i] --;
intoarcere[ok] --;
fout << i << " " << ok << "\n";
}
}
}
}
};
int main() {
Task *task = new Task();
task->show();
delete task;
return 0;
}