zoukankan      html  css  js  c++  java
  • 算法笔记--二分图判定

    算法笔记

    挑战程序设计p98

    #include<bits/stdc++.h>
    using namespace std; 
    #define ll long long
    #define ls rt<<1,l,m
    #define rs rt<<1|1,m+1,r
    const int INF=0x3f3f3f3f;
    const int N=1e5+5;
    vector<int>g[N];
    int color[N]={0};
    
    bool dfs(int u, int c)
    {
        color[u]=c;
        for(int i=0;i<g[u].size();i++)
        {
            if(color[g[u][i]]==c)return false;
            if(color[g[u][i]]==0&&!dfs(g[u][i],-c))return false;
        }
        return true;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            int t;
            cin>>t;
            while(t--)
            {
                int a;
                cin>>a;
                g[i].push_back(a);
            }
        }
        
      for(int i=0;i<n;i++)
      {
        if(color[i]==0)
            {
                if(!dfs(0,1))
                {
                    cout<<"NO"<<endl;
                    return 0;
                }
            }
      }
        cout<<"YES"<<endl;
        return 0;
    }

    例题1:hiho1121 : 二分图一•二分图判定

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define ls rt<<1,l,m
    #define rs rt<<1|1,m+1,r
    const int INF=0x3f3f3f3f;
    const int N=1e5+5;
    vector<int>g[N];
    int color[N]={0};
    
    bool dfs(int u, int c)
    {
        color[u]=c;
        for(int i=0;i<g[u].size();i++)
        {
            if(color[g[u][i]]==c)return false;
            if(color[g[u][i]]==0&&!dfs(g[u][i],-c))return false;
        }
        return true;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int t,n,m,u,v;
        cin>>t;
        
        while(t--)
        {
            cin>>n>>m;
            for(int i=1;i<=n;i++)g[i].clear();
            memset(color,0,sizeof(color));
            
            for(int i=0;i<m;i++)
            {
                cin>>u>>v;
                g[u].push_back(v);
                g[v].push_back(u); 
            }
            
            bool flag=true;
            for(int i=1;i<=n;i++)
            {
                if(color[i]==0)
                {
                    if(!dfs(i,1))
                    {
                        flag=false;
                    }
                }
            }
            if(flag)cout<<"Correct"<<endl;
            else cout<<"Wrong"<<endl;
        }
        
        return 0;
    }
    View Code

    例题2:HDU 3478 Catch

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int N=1e5+5;
    vector<int>g[N];
    //bool vis[N]={false};
    int color[N]={0} ;
    /*void dfs(int o,int u)//联通性判定 
    {
        vis[u]=true;
        for(int &v:g[u])if(v!=o&&!vis[v])dfs(u,v);
    }*/
    
    bool DFS(int u,int c)//二分图判定 
    {
        color[u]=c;
        for(int &v:g[u])
        {
            if(color[v]==c)return false;
            if(color[v]==0&&!DFS(v,-c))return false;
        }
        return true;
    } 
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int t,n,m,s,u,v,cse=1;
        cin>>t;
        while(t--)
        {
            cin>>n>>m>>s;
            for(int i=0;i<n;i++)g[i].clear();
            for(int i=0;i<m;i++)cin>>u>>v,g[u].pb(v),g[v].pb(u);
            cout<<"Case "<<cse++<<": ";
            //mem(vis,false);
            mem(color,0);
            //dfs(0,0);    
            bool flag=true;
            //for(int i=0;i<n;i++)if(!vis[i])flag=false;
            if(DFS(0,1))flag=false;
            if(flag)cout<<"YES"<<endl;
            else cout<<"NO"<<endl;     
        }
        return 0;
    }
    View Code
  • 相关阅读:
    servlet中getWriter和getOutputStream的区别
    一个页面访问错误的问题
    sendRedirect实现原理分析
    servlet开发细节
    tomcat 目录分析
    servlet杂谈
    SQL 查询中的like子句的另一种实现方法,速度比like快
    让复合控件的子控件获得设计时支持
    bug管理工具——Gemini
    HtmlAgilityPack获取#开头节点的XPath
  • 原文地址:https://www.cnblogs.com/widsom/p/7250192.html
Copyright © 2011-2022 走看看