struct Gale_Shapley{
static const int N=60;
int n;
int fg;
int woman[N][N]; //第i个girl对编号j的boy的好感排位
int man[N][N]; //第i个boy第j喜欢的girl
int man_match[N],woman_match[N]; //已匹配的男女
int p[N]; //第i个boy已经表白的人数
void solve(){
for(int i=0;i<N;i++)p[i]=1;//初始化每个男生表白1次
memset(man_match,0,sizeof(man_match));
memset(woman_match,0,sizeof(woman_match));
fg=true;
//fg标记当前是否还有人没有匹配
while(fg){
fg=false;
for(int i=1;i<=n;i++){//男生i进行表白
if(!man_match[i]){//如果没有匹配
int t=man[i][p[i]++];//男生向下一个倾慕对象表白
if(!woman_match[t]){//如果女生没有匹配,直接配对
man_match[i]=t;
woman_match[t]=i;
}else if(woman[t][woman_match[t]]>woman[t][i]){
//如果女生觉得这个男生比自己现在的更好
man_match[woman_match[t]]=0; //抛弃之前的
man_match[i]=t;
woman_match[t]=i;
}
fg=true;
}
}
}
}
}T;