Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define maxx 100005
- #define inf 2000000000
- #define mod 1000000007
- #define pii pair<int,int>
- #define piii pair<pii,pii>
- #define pli pair<long long,int>
- #define f first
- #define s second
- #define in(x) scanf("%d",&x)
- #define IN(x) scanf("%lld",&x)
- #define inch(x) scanf("%s",x)
- #define indo(x) scanf("%lf",&x)
- #define pb push_back
- typedef long long ll;
- typedef unsigned long long ull;
- using namespace std;
- int n, m, k, a, b, max_matching;
- vector<int>g[105], used, R;
- int dfs(int node){
- if(used[node]) return 0;
- used[node] = 1;
- for(int i = 0; i < g[node].size(); i++){
- int to = g[node][i];
- if((R[to] == -1) || dfs(R[to])){
- R[to] = node;
- return 1;
- }
- }
- return 0;
- }
- void Augmented_Path(){
- R.assign(m + 1, -1);
- for(int i = 1; i <= n; i++){
- used.assign(n + 1, 0);
- if(dfs(i))
- max_matching++;
- }
- }
- int main()
- {
- in(n); in(m); in(k);
- while(k --){
- in(a); in(b);
- g[a].pb(b);
- }
- Augmented_Path();
- printf("%d\n",max_matching);
- for(int i = 1; i <= m; i++)
- if(R[i] != -1)
- printf("%d %d\n", R[i], i);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement