a53

CUPLAJ_MAXIM_EXEMPLU

a53
May 21st, 2022 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <cstring>
  4. #define N 50001
  5. #define FOR(i,a,b) for(int i=(int)(a);i<=(int)(b);++i)
  6. #define FORI(i,V) for(vector <int>::iterator i=(V).begin();i!=(V).end();++i)
  7. using namespace std;
  8. const char iname[]="falkland.in";
  9. const char oname[]="falkland.out";
  10. vector <int> G[N];
  11. int l[N],r[N],u[N];
  12.  
  13. int pairup(const int n)
  14. {
  15. if(u[n])
  16. return 0;
  17. u[n]=1;
  18. FORI(i,G[n])
  19. if(!r[*i])
  20. {
  21. l[n]=*i;
  22. r[*i]=n;
  23. return 1;
  24. }
  25. FORI(i,G[n])
  26. if (pairup(r[*i]))
  27. {
  28. l[n]=*i;
  29. r[*i]=n;
  30. return 1;
  31. }
  32. return 0;
  33. }
  34.  
  35. int main(void)
  36. {
  37. freopen(iname,"r",stdin);
  38. int n,m,k;
  39. scanf("%d %d %d",&n,&m,&k);
  40. int x,y;
  41. while(k--)
  42. scanf("%d %d",&x,&y),G[x].push_back(y);
  43. for(int change=1;change;)
  44. {
  45. change=0;
  46. memset(u,0,sizeof(u));
  47. FOR (i,1,n)
  48. if(!l[i])
  49. change|=pairup(i);
  50. }
  51. int r=0;
  52. FOR(i,1,n)
  53. r+=(l[i]>0);
  54. freopen(oname,"w",stdout);
  55. printf("%d\n",r);
  56. FOR(i,1,n)
  57. if(l[i]>0)
  58. printf("%d %d\n",i,l[i]);
  59. return 0;
  60. }
  61.  
Add Comment
Please, Sign In to add comment