-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathairline_crews.cpp
80 lines (64 loc) · 1.7 KB
/
airline_crews.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
#define MAXN 100
int nx,ny;
int adj_matrix[MAXN][MAXN];
int cx[MAXN],cy[MAXN];
int mk[MAXN];
int path(int u,vector<vector<bool> > adj_matrix){
for(int v=0;v<ny;++v){
if(adj_matrix[u][v] && !mk[v]){
mk[v]=1;
if(cy[v]==-1 || path(cy[v],adj_matrix)){
cx[u]=v;
cy[v]=u;
return 1;
}
}
}
return 0;
}
int maxMatch(vector<vector<bool> > adj_matrix){
int res=0;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
for(int i=0;i<nx;++i){
if(cx[i]==-1){
memset(mk,0,sizeof(mk));
res+=path(i,adj_matrix);
}
}
return res;
}
vector<vector<bool> > ReadData() {
int num_left, num_right;
cin >> num_left >> num_right;
vector<vector<bool> > adj_matrix(num_left, vector<bool>(num_right));
for (int i = 0; i < num_left; ++i)
for (int j = 0; j < num_right; ++j) {
int bit;
cin >> bit;
adj_matrix[i][j] = (bit == 1);
}
return adj_matrix;
}
int main() {
vector<vector<bool> > adj_matrix = ReadData();
nx = adj_matrix.size();
ny = adj_matrix[0].size();
int num= maxMatch(adj_matrix);
//cout<<"num="<<num<<endl;
for(int num=0;num<nx;++num){
if (cx[num]+1)
{
cout<<cx[num]+1<<' ';
}
else
{
cout<<-1<<' ';
}
}
return 0;
}