#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define vc vector
#define st first
#define nd second
#define pll pair<ll, ll>
#define sz(a) (ll)a.size()
#define all(a) a.begin(), a.end()
#define pub push_back
#define pob pop_back
ll E, n, V;
vc<vc<ll>> a;
void input() {
cin >> E >> n >> V;
a.assign(E, vc<ll>(n));
for (ll i = 0; i < E; i++)
for (ll j = 0; j < n; j++) {
cin >> a[i][j];
a[i][j]--;
}
}
struct Edge {
ll v, i;
};
void solve() {
vc<vc<Edge>> g(V, vc<Edge>());
for (ll i = 0; i < E; i++) {
ll v = a[i][0];
ll w = a[i][1];
g[v].pub({w, i});
g[w].pub({v, i});
}
vc<ll> exp(V, 0);
for (ll i = 0; i < E; i++)
exp[a[i][0]]++, exp[a[i][1]]++;
for (ll i = 0; i < V; i++)
exp[i] /= 2;
vc<ll> cur(V, 0);
for (ll i = 0; i < E; i++)
cur[a[i][0]]++;
vc<bool> vis;
function<bool(ll)> dfs = [&](ll v) {
vis[v] = true;
if (cur[v] < exp[v]) {
cur[v]++;
return true;
}
for (auto &e : g[v]) {
if (vis[e.v] or a[e.i][0] != v)
continue;
if (dfs(e.v)) {
swap(a[e.i][0], a[e.i][1]);
return true;
}
}
return false;
};
while (true) {
vis.assign(V, false);
bool git = false;
for (ll v = 0; v < V; v++) {
if (vis[v] or cur[v] <= exp[v])
continue;
if (dfs(v)) {
git = true;
cur[v]--;
}
}
if (not git)
break;
}
for (auto &ai : a)
cout << ai[0] + 1 << " " << ai[1] + 1 << "\n";
}
void program() {
input();
solve();
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
program();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |