穩定婚姻問題學習筆記

2022-05-01 20:54:09 字數 2761 閱讀 5268

1.uva1175 ladies' choice

最簡單的板子,直接上**,抄的大劉的

#include #include  #include   #include   #include    #include    #include    #include     #include     #include     #include       #include       using namespace std;

#define ull unsigned long long

#define pii pair#define uint unsigned int

#define mii map#define lbd lower_bound

#define ubd upper_bound

#define inf 0x3f3f3f3f

#define iinf 0x3f3f3f3f3f3f3f3fll

#define def 0x8f8f8f8f

#define ddef 0x8f8f8f8f8f8f8f8fll

#define vi vector#define ll long long

#define mp make_pair

#define pb push_back

#define re register

#define il inline

#define n 1000

int pref[n+5][n+5], order[n+5][n+5], nxt[n+5];

int futurehusband[n+5], futurewife[n+5];

queueq;

void engage(int man, int woman)

futurewife[man] = woman;

futurehusband[woman] = man;

}int main()

for(int i = 1; i <= n; ++i)

futurehusband[i] = 0;

}while(!q.empty())

while(!q.empty()) q.pop();

for(int i = 1; i <= n; ++i) printf("%d\n", futurewife[i]);

if(t) printf("\n");

} return 0;

}

2.矩陣變換

不知道是怎麼發現的乙個性質

對於一行,它更喜歡這一行靠前的數

對於乙個數,它更喜歡它的位置靠後的行

然後就轉化為乙個穩定婚姻問題了

關於上面的那條性質,這是乙個例子:

0 1 0 2

1 0 2 0

行\(1\)喜歡的數的順序:\(1\ 2\)

行\(2\)喜歡的數的順序:\(1\ 2\)

數\(1\)對於行的喜歡順序:\(1\ 2\)

數\(2\)對於行的喜歡順序:\(1\ 2\)

#include #include  #include   #include   #include    #include    #include    #include     #include     #include     #include       #include       using namespace std;

#define ull unsigned long long

#define pii pair#define uint unsigned int

#define mii map#define lbd lower_bound

#define ubd upper_bound

#define inf 0x3f3f3f3f

#define iinf 0x3f3f3f3f3f3f3f3fll

#define def 0x8f8f8f8f

#define ddef 0x8f8f8f8f8f8f8f8fll

#define vi vector#define ll long long

#define mp make_pair

#define pb push_back

#define re register

#define il inline

#define n 200

#define m 200

int n, m;

int matchx[n+5], matchy[n+5], a[n+5][2*n+5];

int pref[n+5][n+5], order[n+5][n+5], nxt[n+5], head[n+5];

queueq;

void engage(int man, int woman)

matchx[man] = woman;

matchy[woman] = man;

}int main()

q.push(i);

} for(int j = m; j >= 1; --j)

for(int i = 1; i <= n; ++i)

if(a[i][j]) order[a[i][j]][i] = ++head[a[i][j]];

while(!q.empty())

for(int i = 1; i <= n; ++i) printf("%d ", matchx[i]);

printf("\n");

} return 0;

}

穩定婚姻問題

穩定婚姻是組合數學裡面的乙個問題。問題大概是這樣 有乙個社團裡有n個女生和n個男生,每位女生按照她的偏愛程度將男生排序,同時每位男生也按照自己的偏愛程度將女生排序。然後將這n個女生和n個男生配成完備婚姻。如果存在兩位女生a和b,兩位男生a和b,使得a和a結婚,b和b結婚,但是a更偏愛b而不是a,b更...

穩定婚姻問題

著名的穩定婚姻問題是美國數學家 經濟學家lloyd stowell shapley 1923 提出的。下面介紹一下背景 某單位有n個姑娘w1,w2,wn和n個小伙m1,m2 mn。每位姑娘對所有小伙有乙個滿意度排序,每位小伙對所有姑娘也有一滿意度排序。m1 w2 w1 w3 w1 m1 m3 m2 ...

穩定婚姻問題模板

題目鏈結 這題寫的一把辛酸淚,第一次用getchar 讀入,再加上很少用scanf 讀入字元,被輸入輸出緩衝安排的明明白白,最後放棄 用cin,還是死活沒有輸出,最後才發現是因為for迴圈多加了一步,白被坑了有一天。演算法分析 首先把每個男士加入佇列,讓每乙個沒配對的男士去向女士請求配對,如果女士沒...