Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- const int MAX_N = 30;
- int N1, N2;
- int L[MAX_N], R[MAX_N];
- vector < int > v[MAX_N];
- char S[100];
- bool used[MAX_N], SL[MAX_N], SR[MAX_N];
- inline void support(int x) {
- for(size_t i = 0; i < v[x].size(); ++i) {
- int y = v[x][i];
- if(SR[y])
- continue;
- SR[y] = 1;
- SL[R[y]] = 0;
- support(R[y]);
- }
- }
- inline bool pair_up(int x) {
- if(used[x])
- return 0;
- used[x] = 1;
- for(size_t i = 0; i < v[x].size(); ++i) {
- int y = v[x][i];
- if(!R[y] || pair_up(R[y])) {
- L[x] = y;
- R[y] = x;
- return 1;
- }
- }
- return 0;
- }
- int main() {
- FILE *f, *g;
- f = fopen("paznici.in", "r");
- g = fopen("paznici.out", "w");
- fscanf(f, "%d %d", &N1, &N2);
- fgets(S, 3, f);
- for(int i = 1; i <= N1; ++i) {
- fgets(S, 95, f);
- for(int j = 0; j < N2; ++j)
- if(S[j] == '1')
- v[i].push_back(j+1);
- }
- int ok = 1;
- while(ok) {
- memset(used, 0, sizeof(used));
- ok = 0;
- for(int i = 1; i <= N1; ++i)
- if(!L[i] && pair_up(i))
- ok = 1;
- }
- for(int i = 1; i <= N1; ++i)
- if(L[i])
- SL[i] = 1;
- for(int i = 1; i <= N1; ++i)
- if(!L[i])
- support(i);
- for(int i = 1; i <= N1; ++i)
- if(SL[i])
- fprintf(g, "%c", i+'A'-1);
- for(int i = 1; i <= N2; ++i)
- if(SR[i])
- fprintf(g, "%c", i+'a'-1);
- fprintf(g, "\n");
- fclose(f);
- fclose(g);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement