fork download
  1. #include <vector>
  2. #include <list>
  3. #include <map>
  4. #include <set>
  5. #include <queue>
  6. #include <deque>
  7. #include <stack>
  8. #include <string>
  9. #include <bitset>
  10. #include <algorithm>
  11. #include <functional>
  12. #include <numeric>
  13. #include <utility>
  14. #include <sstream>
  15. #include <iostream>
  16. #include <iomanip>
  17. #include <cstdio>
  18. #include <cmath>
  19. #include <cstdlib>
  20. #include <ctime>
  21. #include <cstring>
  22. #include <climits>
  23. #include <cctype>
  24. #include <cassert>
  25.  
  26. using namespace std;
  27.  
  28. #define ull unsigned long long
  29. #define ill long long int
  30. #define pii pair<int,int>
  31. #define pb(x) push_back(x)
  32. #define F(i,a,n) for(i=(a);i<(n);++i)
  33. #define FD(i,a,n) for(int i=(a);i>=(n);--i)
  34. #define FE(it,x) for(it=x.begin();it!=x.end();++it)
  35. #define V(x) vector<x>
  36. #define S(x) scanf("%d",&x)
  37. #define Sl(x) scanf("%lld",&x)
  38. #define M(x,i) memset(x,i,sizeof(x))
  39. #define all(x) x.begin(), x.end()
  40. #define rall(x) x.rbegin(), x.rend()
  41. #define debug(i,sz,x) F(i,0,sz){cout<<x[i]<<" ";}cout<<endl
  42. #define fr first
  43. #define se second
  44.  
  45. /* Relevant code begins here */
  46.  
  47. #define MOD 1000000007
  48.  
  49. int cnt[11], matchR[101];
  50. bool arr[101][101];
  51. int n;
  52.  
  53. bool bpm(bool bpGraph[101][101], int u, bool seen[])
  54. {
  55. for (int v = 100; v >= 0; v--)
  56. {
  57. if (bpGraph[u][v] && !seen[v])
  58. {
  59. seen[v] = true; // Mark v as visited
  60. if (matchR[v] < 0 || bpm(bpGraph, matchR[v], seen))
  61. {
  62. matchR[v] = u;
  63. return true;
  64. }
  65. }
  66. }
  67. return false;
  68. }
  69.  
  70. int maxBPM(bool bpGraph[101][101])
  71. {
  72. memset(matchR, -1, sizeof(matchR));
  73.  
  74. int result = 0; // Count of jobs assigned to applicants
  75. for (int u = 0; u < n; u++)
  76. {
  77. // Mark all jobs as not seen for next applicant.
  78. bool seen[101];
  79. memset(seen, 0, sizeof(seen));
  80.  
  81. // Find if the applicant 'u' can get a job
  82. if (bpm(bpGraph, u, seen))
  83. result++;
  84. }
  85. return result;
  86. }
  87.  
  88. int main()
  89. {
  90. int i, j, k, m;
  91.  
  92. S(n);
  93.  
  94. F(i, 1, 10) S(cnt[i]);
  95.  
  96. F(i, 0, n) {
  97. S(k);
  98. F(j, 0, k) {
  99. S(m);
  100. int l;
  101. F(l, 0, cnt[m]) {
  102. arr[i][m*10+l] = 1;
  103. //printf("%d %d\n", i, m*10 + l);
  104. }
  105. }
  106. }
  107.  
  108. int res = maxBPM(arr);
  109. if (res < n) printf("It seems MSG\n");
  110. else {
  111. int arr2[101];
  112. F(i, 0, 101) {
  113. if (matchR[i] != -1) {
  114. arr2[matchR[i]] = i/10;
  115. }
  116. }
  117. F(i, 0, n) printf("%d ", arr2[i]);
  118. printf("\n");
  119. }
  120. return 0;
  121. }
Success #stdin #stdout 0s 3152KB
stdin
Standard input is empty
stdout