二分图

来源:互联网 发布:淘宝子账号是干嘛的 编辑:程序博客网 时间:2024/05/18 00:02

简单二分图板子

#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <cmath>using namespace std;typedef long long LL;const int MaxN = 1000;using namespace std;struct node{    int x , y;}a[MaxN + 5] , b[MaxN + 5];vector<int> G[MaxN + 5];bool vis[MaxN + 5];int n , match[MaxN + 5];bool dfs(int x){    vis[x] = true;//当前点匹配好了    for(int i = 0 ; i < G[x].size() ; i++){        int v = G[x][i] , w = match[v];        if(w < 0 || !vis[w] && dfs(w)){//若v点没有匹配,||之前匹配的还有其他的点可以匹配            match[v] = w;//就挨个匹配嘛            match[x] = v;            return true;//找到了        }    }    return false;}void build(int u , int v){    G[u].push_back(v);    G[v].push_back(u);}void Init(){    一顿建图}int matching()//匹配个数{    for(int i = 1 ; i <= MaxN ; i++) G[i].clear();    int ans = 0;    memset(match , -1 , sizeof(match));    for(int i = 1 ; i <= n ; i++){        if(match[i] == -1){            memset(vis , 0 , sizeof(vis));            if(dfs(i)) ans++;        }    }    return ans;}
原创粉丝点击