Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- using namespace std;
- #define f first
- #define s second
- #define pi pair<int,int>
- #define FOR(i,a,b) for(int i=a;i<b;i++)
- #define For(i,a) FOR(i,0,a)
- #define trav(a,b) for(auto& a:b)
- #define all(x) begin(x),end(x)
- #define sz(x) (int)(x.size())
- #define vi vector<int>
- #define vpi vector<pi>
- #define pb push_back
- #define ins insert
- #define f first
- #define f first
- const int MX=305;
- const int MX2=MX*MX;
- vpi adj[MX][2];
- bool on[MX2];
- bool done[MX][2],vis[MX][2];
- vpi edg;
- bool dfs(int n, int typ){
- // cout<<"HI: "<<n<<" "<<typ<<endl;
- if(vis[n][typ])return false;
- vis[n][typ]=true;
- if(typ && !done[n][typ]){
- // cout<<"GOOD "<<n<<" "<<typ<<endl;
- return true;
- }
- trav(x,adj[n][typ]){
- if(typ==0){
- if(!on[x.s]){
- bool z=dfs(x.f,1);
- if(z){
- done[n][0]=true;
- done[x.f][1]=true;
- on[x.s]=true;
- return true;
- }
- }
- } else {
- if(on[x.s]){
- bool z=dfs(x.f,0);
- if(z){
- on[x.s]=false;
- return true;
- }
- }
- }
- }
- return false;
- }
- int main(){
- int L,R,M;cin>>L>>R>>M;
- For(i,M){
- int a,b;cin>>a>>b;
- adj[a][0].pb({b,i});
- adj[b][1].pb({a,i});
- edg.pb({a,b});
- }
- For(i,L){
- if(!done[i][0]){
- memset(vis,false,sizeof vis);
- dfs(i,0);
- }
- // cout<<"DONE: "<<i<<endl;
- }
- int cnt=0;
- For(i,L)if(done[i][0])cnt++;
- cout<<cnt<<endl;
- For(i,M)if(on[i]){
- pi tmp=edg[i];
- cout<<tmp.f<<" "<<tmp.s<<endl;
- }
- }
Add Comment
Please, Sign In to add comment