bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
稳定婚姻问题:
有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样、
将男生和女生两两配对,保证不会出现婚姻不稳定的问题。
即A-1,B-2 而A更喜欢2,2更喜欢A。
算法流程:
每次男生向自己未追求过的排名最高女生求婚。
然后每个有追求者的女生在自己现男友和追求者中选择一个最喜欢的接受,然后拒绝其他人。
算法一定可以结束。
因为如果最后有一个男生单身,那他一定把所有女生都追求过一遍,说明没有女生单身,产生矛盾。
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 81 82 83 84 85 86 87 88 89 90 91 92 | #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #define inf 0x3f3f3f3f #define pb(x) push_back(x) using namespace std; int read() { char c= getchar (); int p=0; while (c< '0' ||c> '9' )c= getchar (); while (c>= '0' &&c<= '9' )p=p*10+c- '0' ,c= getchar (); return p; } int n,m; int map[205][405]; int man[205][205]; int wom[206][206]; int ok[205],ko[205]; int now[205]; int num; vector< int >v[205]; void solve() { num=0; memset (ko,0, sizeof (ko)); memset (ok,0, sizeof (ok)); memset (now,0, sizeof (now)); for ( int i=1;i<=n;i++)now[i]=1; while (num<n) { for ( int i=1;i<=n;i++) { if (!ok[i]) { v[man[i][now[i]]].pb(i); now[i]++; } } for ( int i=1;i<=n;i++) { int mn=-1; for ( int j=0;j<v[i].size();j++) { if (mn==-1||wom[i][v[i][j]]<wom[i][mn])mn=v[i][j]; } if (mn!=-1) { if (!ko[i]||wom[i][mn]<wom[i][ko[i]]) { if (!ko[i])num++; ok[ko[i]]=0; ko[i]=mn; ok[mn]=i; } } v[i].clear(); } } for ( int i=1;i<=n;i++) { printf ( "%d%c" ,ok[i], " \n" [i==n]); } puts ( "" ); return ; } int main() { int cas; scanf ( "%d" ,&cas); while (cas--) { memset (map,0, sizeof (map)); scanf ( "%d%d" ,&n,&m); for ( int i=1;i<=n;i++) { int cnt=0; for ( int j=1;j<=m;j++) { scanf ( "%d" ,&map[i][j]); if (map[i][j]!=0) { man[i][++cnt]=map[i][j]; wom[map[i][j]][i]=m-j; } } } solve(); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析