您的位置:首页 > 其它

UVA 10004 Bicoloring(DFS染色)

2014-11-13 01:28 423 查看
题意:

给N个点构成的无环无向图,并且保证所有点对都是连通的。

给每个点染色,要么染成黑要么染成白。问是否存在染色方案使得所有有边相连的点对颜色一定不一样。

是输出 BICOLORABLE 否则输出 NOT BICOLORABLE

思路:

从某点开始,直接进行染色,如果矛盾,返回false。

代码:

int n,l;
vector<int> graph[205];
int color[205];

bool dfs(int u,int fa){
if(color[fa]==0)
color[u]=1;
else
color[u]=0;
int L=graph[u].size();
rep(i,0,L-1){
int v=graph[u][i];
if(v!=fa){
if(color[v]==-1)
dfs(v,u);
else
if(color[v]+color[u]!=1) return false;
}
}
return true;
}

int main(){
int start;
while(scanf("%d",&n)!=EOF,n){
scanf("%d",&l);
rep(i,0,n-1) graph[i].clear();
mem(color,-1); color
=0;
while(l--){
int u,v;
scanf("%d%d",&u,&v); start=u;
graph[u].push_back(v);
graph[v].push_back(u);
}
bool yes=dfs(start,n);
if(yes)
puts("BICOLORABLE.");
else
puts("NOT BICOLORABLE.");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: