Pagini recente » Cod sursa (job #358532) | Cod sursa (job #3277550) | Cod sursa (job #3252469) | Cod sursa (job #1844887) | Cod sursa (job #1162989)
#include <cstdio>
#include <vector>
#define nmax 105
using namespace std;
vector <int> g[nmax];
vector <int> r[nmax];
int input[nmax],output[nmax];
int n,sum;
int main() {
freopen("harta.in","r",stdin);
freopen("harta.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++) {
scanf("%d %d",&output[i],&input[i]);
sum += input[i];
}
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) if (i != j && output[i] > 0 && input[j] > 0) {
g[i].push_back(j);
}
bool changed = true;
while (changed) {
changed = false;
for (int i=1;i<=n;i++) {
if (output[i] > 0) {
int x = g[i].back(); g[i].pop_back();
if (input[x] <= 0) continue;
r[i].push_back(x);
input[x]--;
output[i]--;
changed = true;
}
}
}
printf("%d\n",sum);
for (int i=1;i<=n;i++) {
for (vector <int> :: iterator it = r[i].begin();it != r[i].end();it++) {
printf("%d %d\n",i,*it);
}
}
return 0;
}