Pagini recente » Cod sursa (job #2370555) | Cod sursa (job #760222) | Cod sursa (job #375870) | Cod sursa (job #3181739) | Cod sursa (job #3139506)
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("O3")
#pragma GCC optimize ("O2")
#pragma GCC optimize ("O1")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize ("fast-math")
#define ezurect int T; cin >> T; while(T--){solve();}
const int N = 1e4 + 1, M = 4e5 + 1, mod = 666013;
vector<int> liste[N];
vector<int> r(N), l(N), viz(N);
int n, w, m;
int match(int nod){
if(viz[nod]) return 0;
viz[nod] = 1;
for(auto i : liste[nod]){
if(!r[i]){
l[nod] = i;
r[i] = nod;
return 1;
}
}
for(auto i : liste[nod]){
if(match(r[i])){
l[nod] = i;
r[i] = nod;
return 1;
}
}
return 0;
}
int main(){
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
fin.tie(0)->sync_with_stdio(0);
fin >> n >> w >> m;
for(int i = 1, u, v; i <= m; i++){
fin >> u >> v;
liste[u].push_back(v);
}
int ok = 1;
while(ok){
viz.assign(N, 0);
ok = 0;
for(int i = 1; i <= n; i++){
if(!l[i]) ok |= match(i);
}
}
vector<pair<int, int>> sol;
for(int i = 1; i <= n; i++){
if(l[i]){
sol.push_back({i, l[i]});
}
}
fout << sol.size() << '\n';
for(auto i : sol){
fout << i.first << " " << i.second << '\n';
}
}