【图论】【二分图匹配】[BZOJ 1085]完美的牛栏

来源:互联网 发布:二手笔记本 知乎 编辑:程序博客网 时间:2024/05/22 13:02

二分图匹配裸体,模板题。

#include <cstdio>#include <algorithm>#include <cstring>#include <iostream>using namespace std;const int MAXN = 500;const int MAXM = 50000;struct node{    int v;    node *next;}Edges[MAXM*2+10], *ecnt=Edges, *adj[MAXN+10];int n, m, con[MAXN+10];bool vis[MAXN+10];void addedge(int u, int v){    ++ecnt;    ecnt->v = v;    ecnt->next = adj[u];    adj[u] = ecnt;}bool dfs(int u){    if(vis[u]) return false;    vis[u] = true;    for(node *p=adj[u];p;p=p->next){        int v = p->v;        if(!vis[v]){            if(dfs(con[v]) || !con[v]){                con[u] = v;                con[v] = u;                return true;            }        }    }    return false;}int Edmonds(){    int ans=0;    for(int i=1;i<=n;i++) if(!con[i]){        memset(vis, 0, sizeof vis);        ans += dfs(i);    }    return ans;}int main(){    int L, t;    scanf("%d%d", &n, &m);    for(int i=1;i<=n;i++){        scanf("%d", &L);        for(int j=0;j<L;j++){            scanf("%d", &t);            addedge(i, n+t);            addedge(n+t, i);        }    }    printf("%d\n", Edmonds());    return 0;}
0 0
原创粉丝点击