Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include <vector>
  2.  
  3. #include <cstdio>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. const int MAX_N = 30;
  8.  
  9. int N1, N2;
  10. int L[MAX_N], R[MAX_N];
  11. vector < int > v[MAX_N];
  12. char S[100];
  13. bool used[MAX_N], SL[MAX_N], SR[MAX_N];
  14.  
  15. inline void support(int x) {
  16.     for(size_t i = 0; i < v[x].size(); ++i) {
  17.         int y = v[x][i];
  18.         if(SR[y])
  19.             continue;
  20.         SR[y] = 1;
  21.         SL[R[y]] = 0;
  22.         support(R[y]);
  23.     }
  24. }
  25.  
  26. inline bool pair_up(int x) {
  27.     if(used[x])
  28.         return 0;
  29.     used[x] = 1;
  30.     for(size_t i = 0; i < v[x].size(); ++i) {
  31.         int y = v[x][i];
  32.         if(!R[y] || pair_up(R[y])) {
  33.             L[x] = y;
  34.             R[y] = x;
  35.             return 1;
  36.         }
  37.     }
  38.     return 0;
  39. }
  40.  
  41. int main() {
  42.     FILE *f, *g;
  43.     f = fopen("paznici.in", "r");
  44.     g = fopen("paznici.out", "w");
  45.  
  46.     fscanf(f, "%d %d", &N1, &N2);
  47.     fgets(S, 3, f);
  48.     for(int i = 1; i <= N1; ++i) {
  49.         fgets(S, 95, f);
  50.         for(int j = 0; j < N2; ++j)
  51.             if(S[j] == '1')
  52.                 v[i].push_back(j+1);
  53.     }
  54.  
  55.     int ok = 1;
  56.     while(ok) {
  57.         memset(used, 0, sizeof(used));
  58.         ok = 0;
  59.         for(int i = 1; i <= N1; ++i)
  60.             if(!L[i] && pair_up(i))
  61.                 ok = 1;
  62.     }
  63.  
  64.     for(int i = 1; i <= N1; ++i)
  65.         if(L[i])
  66.             SL[i] = 1;
  67.     for(int i = 1; i <= N1; ++i)
  68.         if(!L[i])
  69.             support(i);
  70.  
  71.     for(int i = 1; i <= N1; ++i)
  72.         if(SL[i])
  73.             fprintf(g, "%c", i+'A'-1);
  74.     for(int i = 1; i <= N2; ++i)
  75.         if(SR[i])
  76.             fprintf(g, "%c", i+'a'-1);
  77.     fprintf(g, "\n");
  78.  
  79.     fclose(f);
  80.     fclose(g);
  81.  
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement