码迷,mamicode.com
首页 > 其他好文 > 详细

二分图

时间:2020-04-21 09:33:48      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:include   步骤   bool   ons   match   pre   一个   memset   main   

染色法判断二分图

算法流程

1.找到未染色的点,为他染色
2.检测所有与染色的点相连接的点,颜色相同,不是二分图,未被染色,为他染色
3.重复步骤1,2直到所有的点都被染色,或者已经判断出他不是二分图。

代码实现

#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
int h[N],r[2*N],v[2*N],tot=1;
void add(int x,int y){
    r[tot]=h[x],v[tot]=y,h[x]=tot++;
}
int color[N];
bool dfs(int u,int c){
    color[u]=c;
    for(int j = h[u];j;j=r[j]){
        int y=v[j];
        if(color[y]==c)return false;
        if(color[y]==0&&!dfs(y,-c))return false;
    }
    return true;
}
int main(){
    int n,m,x,y;
    cin>>n>>m;
    for(int i = 0;i<m;i++){
        cin>>x>>y;
        add(x,y);add(y,x);
    }
    for(int i = 1;i<=n;i++){
        if(color[i]==0){
            if(!dfs(i,1)){
                cout<<"No"<<endl;
                return 0;
            }
        }
    }
    cout<<"Yes"<<endl;
}

匈牙利算法

算法流程

1.为还没有匹配的左半部节点,匹配右半部节点
2.匹配过程如果右半部节点未被被占用或占用该节点的,左半部节点,可以占用另一个右半部节点。那么可以进行匹配,否则匹配失败
3.重复步骤1,2;直到所有的节点都进行了一次匹配。

代码

#include<iostream>
#include<cstring>
using namespace std;
const int N = 510,M=100010;
int h[N],r[M],v[M],tot=1;
void add(int x,int y){
    r[tot]=h[x],v[tot]=y,h[x]=tot++;
}
int match[N];
bool st[N];
bool find(int x){
    for(int y = h[x];y;y=r[y]){
        if(!st[v[y]]){
            st[v[y]]=true;
            if(!match[v[y]]||find(match[v[y]])){
                match[v[y]]=x;
                return true;
            }
        }
    }
    return false;
}
int main(){
    int n1,n2,m,x,y;
    cin>>n1>>n2>>m;
    for(int i = 1;i<=m;i++){
        cin>>x>>y;
        add(x,y);
    }
    int res=0;
    for(int i=1;i<=n1;i++){
        memset(st,0,sizeof st);
        if(find(i)) res++;
    }
    cout<<res<<endl;
}

二分图

标签:include   步骤   bool   ons   match   pre   一个   memset   main   

原文地址:https://www.cnblogs.com/cqyinsist/p/12742256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!