Advertisement
Guest User

Untitled

a guest
Jul 29th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. /*
  2. * =====================================================================================
  3. *
  4. * Filename: 1669.cpp
  5. *
  6. * Description:
  7. *
  8. * Version: 1.0
  9. * Created: 13-11-2015 14:32:49
  10. * Revision: none
  11. * Compiler: gcc
  12. *
  13. * Author:
  14. * Company:
  15. *
  16. * =====================================================================================
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <algorithm>
  22. #include <vector>
  23. #include <string.h>
  24. #include <math.h>
  25. #include <set>
  26. #include <iostream>
  27. #include <queue>
  28. #include <string>
  29. #include <ctype.h>
  30. #include <stack>
  31. //#include<time.h>
  32. //#include<unordered_map>
  33. #include <map>
  34. //#include <windows.h>
  35.  
  36. using namespace std;
  37.  
  38. template< class T > T gcd(T a, T b) { return (b != 0 ? gcd<T>(b, a%b) : a); }
  39.  
  40. typedef long long int llint;
  41. typedef unsigned long long int ullint;
  42.  
  43. #define FOR(i,a,b) for(int i = a;i<b;++i)
  44. #define EPS 1e-3
  45. #define INF 100002
  46.  
  47. int deps[INF];
  48. vector<vector<int> > depsDeste(INF);
  49.  
  50. inline int solve(int cd, int n1, int n2){
  51. queue<int> pacotes[2];
  52. //vector<vector<int> > depsDesteAux = depsDeste;
  53. int depsAux[n1+n2];
  54. int ans = 0;
  55.  
  56. FOR(i,0,n1+n2) depsAux[i] = deps[i];
  57. FOR(i,0,n1)
  58. if(!deps[i]) pacotes[0].push(i);
  59.  
  60. FOR(i,n1,n1+n2)
  61. if(!deps[i]) pacotes[1].push(i);
  62.  
  63. //cout<<pacotes[0].size()<< " " << pacotes[0].front()<<endl;
  64. //cout<<pacotes[1].size()<< " " << pacotes[1].front()<<endl;
  65.  
  66. while(!pacotes[0].empty() || !pacotes[1].empty()){
  67. while(!pacotes[cd].empty()){
  68. int topo = pacotes[cd].front();
  69. pacotes[cd].pop();
  70.  
  71. FOR(i,0,(int)depsDeste[topo].size()){
  72. int aux = --depsAux[depsDeste[topo][i]];
  73. //cout<<"cd: " << cd << " here:"<<depsDeste[topo][i]<< " de quem: "<< topo << " aux: "<<aux<<endl;
  74. if(!aux)
  75. if(depsDeste[topo][i]>=n1) pacotes[1].push(depsDeste[topo][i]);
  76. else pacotes[0].push(depsDeste[topo][i]);
  77. }
  78. }
  79. //cout<<"Simulando "<<cd<<" ans:" <<ans<<endl;
  80. if(cd) cd = 0;
  81. else cd = 1;
  82. ans++;
  83. }
  84.  
  85. return ans+1;
  86. }
  87.  
  88. int main(){
  89.  
  90. ios::sync_with_stdio(false);
  91.  
  92. int n1,n2,d;
  93.  
  94. while(cin>>n1>>n2>>d){
  95. if(!n1 && !n2) break;
  96.  
  97. memset(deps,0,sizeof deps);
  98. FOR(i,0,n1+n2+1) depsDeste[i].clear();
  99.  
  100. FOR(i,0,d){
  101. int a,b;
  102. cin>>a>>b;
  103. a--, b--;
  104. deps[a]++;
  105. depsDeste[b].push_back(a);
  106. }
  107.  
  108. cout << min(solve(0,n1,n2), solve(1,n1,n2)) <<endl;
  109. }
  110.  
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement