Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- int tt;
- cin >> tt;
- while (tt--) {
- int n;
- cin >> n;
- vector <int> deg(n + 1);
- set <pair <int, int>> st;
- for (int i = 1; i <= n; i++) {
- cin >> deg[i];
- if (deg[i] > 0)
- st.insert({deg[i], i});
- }
- vector < pair <int, int> > edges;
- while (!st.empty()) {
- auto last = --st.end();
- auto prev = --(--st.end());
- edges.emplace_back(last->second, prev->second);
- pair <int, int> p1 = *last, p2 = *prev;
- st.erase(last);
- st.erase(prev);
- p1.first--;
- p2.first--;
- if (p1.first > 0)
- st.insert(p1);
- if (p2.first > 0)
- st.insert(p2);
- }
- cout << edges.size() << endl;
- for (int i = 0; i < edges.size(); i++) {
- cout << edges[i].first << " " << edges[i].second << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement