sgu-264. Travel 稳定婚姻问题

来源:互联网 发布:csgo显示网络数据命令 编辑:程序博客网 时间:2024/05/22 14:47

题意:

男女配对,最后没有一对男女对对方的喜欢程度都高于现在的配偶

tip:

感觉和二分图差不多嘛。所有男的放队列 一个个出来,
先找最喜欢的,要是她单身就结婚 不单身就问她要不要私奔 私奔了原来配的就又单身 放入队列

#include <cstdio>#include <iostream>#include <algorithm>#include <map>#include <cstring>#include <queue>using namespace std;const int maxn = 2010;map<string,int> mp;map<int,string> mpb;int g[maxn][maxn],like[maxn][maxn],match[maxn*2];char s[20];int num,n;string a,b;void init(){    scanf("%d",&n);    for(int i = 1; i <= n ;i++){        scanf("%s",s);        int len = strlen(s);        a = "";        for(int i = 0 ; i < len ; i++)  a += s[i];        mp[a] = i;mpb[i] = a;        for(int j = 1;  j <= n ; j++){            scanf("%s",s);            len = strlen(s);            b = "";            for(int i = 0 ; i < len ; i++)  b += s[i];            int t = mp[b];            if(t == 0){                int tmp = ++num;                mp[b] = tmp+n;                mpb[tmp+n] = b;                t = tmp+n;            }            g[i][j] = t;        }    }    for(int i =1 ; i <= n ; i++){        scanf("%s",s);        int len = strlen(s);        a = "";        for(int i = 0 ; i < len ; i++)  a += s[i];        int t = mp[a];        for(int j = 1; j <= n ; j++){            scanf("%s",s);            len = strlen(s);            b = "";            for(int i = 0 ; i < len ; i++)  b += s[i];            like[t][mp[b]] = j;        }    }}void sov(){    queue<int> q;    for(int i = 1; i <= n ; i++)    q.push(i);    while(!q.empty()){        int tmp = q.front();q.pop();        for(int j = 1; j <= n ; j++){            int v = g[tmp][j];            if(!match[v]){                match[v] = tmp;                match[tmp] = v;                break;            }            else if(like[v][match[v]] > like[v][tmp]){                q.push(match[v]);                match[v] = tmp;                match[tmp] = v;                break;            }        }    }}void print(){    printf("YES\n");    for(int i = 1; i <= n ; i++){        cout <<mpb[i]<<" "<<mpb[match[i]]<<endl;    }}int main(){    //ios::sync_with_stdio(0);    init();    sov();    print();}
原创粉丝点击