首页 > 其他 > 详细

UVA 11396 Claw Decomposition 染色

时间:2015-10-13 01:30:47      阅读:340      评论:0      收藏:0      [点我收藏+]

原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2391

题意:

就给你一个图,图中每个点的度都为3,问你能不能分解为若干爪印。。。爪印的定义就是一个中心点,三个叶子的树。

题解:

由于每个点的度都为3,那么每个点要么是爪印的中心,要么是叶子,而且是交替出现的,所以只要黑白染色就好

代码:

#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
#include<algorithm>
#define MAX_N 555
using namespace std;

vector<int> G[MAX_N];
int n;
int d[MAX_N];

bool dfs(int u,int p){
    d[u]=d[p]^1;
    bool tmp=true;
    for(int i=0;i<G[u].size();i++){
        if(d[G[u][i]]==d[u])return false;
        if(d[G[u][i]]==-1)
            tmp&=dfs(G[u][i],u);
    }
    return tmp;
}

int main(){
    while(scanf("%d",&n)){
        if(n==0)break;
        int u,v;
        for(int i=0;i<=n;i++)G[i].clear();
        while(true){
            scanf("%d%d",&u,&v);
            if(u+v==0)break;
            G[u].push_back(v);
            G[v].push_back(u);
        }    
        bool flag=true;
        memset(d,-1,sizeof(d));
        d[0]=0;
        flag=dfs(1,0);
        memset(d,-1,sizeof(d));
        d[0]=1;
        flag&=dfs(1,0);
        if(flag)
            printf("YES\n");
        else 
            printf("NO\n");
    }
    return 0;
}

 

UVA 11396 Claw Decomposition 染色

原文:http://www.cnblogs.com/HarryGuo2012/p/4873354.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!