zoukankan      html  css  js  c++  java
  • uva 11396Claw Decomposotion(二分图判定)

    

    题目大意:给出一个简单无向图。每一个点的度为3。推断是否能将此图分解成若干爪的形式,使得每条边都仅仅出如今唯一的爪中。

    (点能够多次出如今爪中)

    这道题实质上就是问这个图是否为二分图,dfs判定就可以

    #include<cstdio>  
    #include<cstring>  
    #include<cmath>  
    #include<cstdlib>  
    #include<iostream>  
    #include<algorithm>  
    #include<vector>  
    #include<map>  
    #include<queue>  
    #include<stack> 
    #include<string>
    #include<map> 
    #include<set>
    #define eps 1e-6 
    #define LL long long  
    using namespace std;  
    
    const int maxn = 300 + 5;
    const int INF = 0x3f3f3f3f;
    vector<int> G[maxn]; 
    //dfs给二分图进行黑白二着色,用颜色1表示黑色,颜色2表示白色,0表示没着色 
    int color[maxn];    //推断节点u所在的连通分量是否为二分图
    int n; 
    bool bipartite(int u) {
    	for(int i = 0; i < G[u].size(); i++) {
    		int v = G[u][i];
    		if(color[v] == color[u]) return false;
    		if(!color[v]) {
    			color[v] = 3 - color[u];
    			if(!bipartite(v)) return false;
    		}
    	}
    	return true;
    } 
    
    void init() {
    	memset(color, 0, sizeof(color));
    	for(int i = 1; i <= n; i++) G[i].clear();
    	int x, y;
    	while(scanf("%d%d", &x, &y) == 2 && x) {
    		G[x].push_back(y);
    		G[y].push_back(x);
    	}
    }
    
    void solve() {
    	color[1] = 1;
    	if(bipartite(1)) puts("YES");
    	else puts("NO");
    }
    
    int main() {
    	 //freopen("input.txt", "r", stdin);
    	while(scanf("%d", &n) == 1 && n) {
    		init();
    		solve();
    	}
    	return 0;
    }
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    常用数据绑定控件详解
    BookList
    BUG:TreeView: NodeCheck Event Does Not Occur
    SQL Server中TEXT类型操作
    Quote:软件开发工程师的经验之谈
    SQL字符串处理函数大全
    Summary 2009 Target 2010
    读取库中的所有表名 列名
    使用大值数据类型
    sql 修改列名及表名 sp_rename
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7222487.html
Copyright © 2011-2022 走看看