牛客网暑期ACM多校训练营(第五场)E:room(最大权匹配)

 

题目大意:

有n个宿舍,每个宿舍住了四个人。年末宿舍需要重新分配。你收到了n份宿舍的人员请求,求问怎样安排宿舍使得交换的次数最少。

 

解题思路:

刚开始想了一下,然后队友发现对于新旧的宿舍可以建边,它们的权值就是两个宿舍相同的人数。然后直接跑km算法即可。

最后用总人数减去跑出来的权值就是答案。

 

Ac代码:

#include
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
const int maxn=500+10;
const int INF=1e9+7;
const int mod=998244353;
typedef long long ll;
int n;
struct node
{
    int s[5];
}a[maxn],b[maxn];
int nx,ny;
int g[maxn][maxn];
int linker[maxn],lx[maxn],ly[maxn];
int slack[maxn];
bool visx[maxn],visy[maxn];
bool dfs(int x)
{
    visx[x]=1;
    for(int y=0;ytmp)
            slack[y]=tmp;
    }
    return 0;
}
int km()    //kuangbin模板 
{
    memset(linker,-1,sizeof linker);
    memset(ly,0,sizeof ly);
    for(int i=0;ilx[i])
                lx[i]=g[i][j];
        }
    }
    for(int x=0;xslack[i])
                    d=slack[i];
            for(int i=0;i

 

你可能感兴趣的:(图论)