zoukankan      html  css  js  c++  java
  • Hdu2444二分图

    给你一个图,问是否为二分图,若是求出最大匹配。

    并查集判图,原理黑白染色。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int n,m;
    const int maxn = 555;
    int link[maxn];
    int used[maxn];
    int Map[maxn][maxn];
    int father[maxn*2];
    int getfather(int x)
    {
        if(father[x]!=x) father[x]=getfather(father[x]);
        return father[x];
    }
    
    int dfs(int x)
    {
        for(int i=1;i<=n;i++){
            if(Map[x][i]&&!used[i]){
                used[i]=1;
                if(link[i]==-1||dfs(link[i])){
                    link[i]= x; return 1;
                }
            }
        }
        return 0;
    }
    
    int gao()
    {
        int ans=0;
        memset(link,-1,sizeof(link));
        for(int i=1;i<=n;i++){
            memset(used,0,sizeof(used));
            ans+=dfs(i);
        }
        return ans;
    }
    
    int main()
    {
        int a,b;
        while(cin>>n>>m){
            memset(Map,0,sizeof(Map));
            for(int i=1;i<=2*n;i++)
            father[i]= i;
            int flag=0;
            for(int i=0;i<m;i++){
                scanf("%d%d",&a,&b);
                int fa=getfather(a);int fb= getfather(b); int fa1= getfather(a+n);int fb1= getfather(b+n);
                if(fa==fb) flag=1;
                father[fa]=fb1;father[fb]=fa1;
                Map[a][b]=1;Map[b][a]=1;
            }
            if(flag){
                printf("No
    ");continue;
            }
            int t= gao();
            printf("%d
    ",t/2);
        }
        return 0;
    }

     bfs判图

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int n,m;
    const int maxn = 222;
    int link[maxn];
    int used[maxn];
    int Map[maxn][maxn];
    int Dye(int x)
    {
        int vis[maxn];int color[maxn];
        memset(vis,0,sizeof(vis));
        memset(color,-1,sizeof(color));
        queue<int> q;
        q.push(x);
        vis[x]=1; color[x]= 1;
        while(!q.empty()){
            int cur=q.front(); q.pop();
            for(int i=1;i<=n;i++){
                if(!Map[cur][i])continue;
                if(color[i]==color[cur]) return 0;
                color[i]=color[cur]^1;
                if(!vis[i]){
                    vis[i]=1 ;q.push(i);
                }
            }
        }
        return 1;
    }
    
    int dfs(int x)
    {
        for(int i=1;i<=n;i++){
            if(Map[x][i]&&!used[i]){
                used[i]=1;
                if(link[i]==-1||dfs(link[i])){
                    link[i]= x; return 1;
                }
            }
        }
        return 0;
    }
    
    int gao()
    {
        int ans=0;
        memset(link,-1,sizeof(link));
        for(int i=1;i<=n;i++){
            memset(used,0,sizeof(used));
            ans+=dfs(i);
        }
        return ans;
    }
    
    int main()
    {
        int a,b;
        while(cin>>n>>m){
            memset(Map,0,sizeof(Map));
            for(int i=0;i<m;i++){
                scanf("%d%d",&a,&b);
                Map[a][b]=1;Map[b][a]=1;
            }
            int flag=0;
            for(int i=1;i<=n;i++)
                if(!Dye(i)) flag=1;
            if(flag){
                printf("No
    ");continue;
            }
            int t= gao();
            printf("%d
    ",t/2);
        }
        return 0;
    }
  • 相关阅读:
    thinkpa R61i安装XP SATA的解决方法
    成都港宏4S店买的日产,送的无牌DVD 和可视倒车品牌是路特仕 80007
    设计模式之:解剖观察者模式
    java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)
    lephone 壁纸(裸婚时代 童佳倩姚笛壁纸)
    C# 让程序自动以管理员身份运行
    项目管理的5大过程组、9大知识域、44个管理流程的映射关系
    Spring Security 中如何让用户名不存在的错误显示出来(用户名不存在显示Bad credentials)
    eclipse老是报ThreadPoolExecutor$Worker.run()
    Unison文件夹同步工具
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3968485.html
Copyright © 2011-2022 走看看