UVA 11396
Posted TSOI_Vergil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 11396相关的知识,希望对你有一定的参考价值。
这道题看的我一头雾水,看了题解以后理解了半天,我们考虑对于每个点来说,要么它是中心节点,要么它是边缘节点,它不可能既是一个中心节点又是一个边缘节点,因为每个点的度数均为3,如果它是边缘节点,那它已经有一条边连向了中心节点,只剩两条边,不可能再作为中心节点,那多余的边怎么办呢?只能留给其他的中心节点去连,这样的话我们发现每一条边都是连接了中心节点和边缘节点,那如果能爪分解那它一定是二分图,由于题目保证每个点度数是3,那么如果这个图是一个二分图的话,我们一定可以从中心节点的集合里构造出每个爪,这样我们就只需要进行二分图判断。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 305
#define maxm 200000
int pre[maxm],last[maxn],other[maxm];
int n,m,l,col[maxn];
void connect(int x,int y)
l++;
pre[l]=last[x];
last[x]=l;
other[l]=y;
bool dfs(int u)
for (int p=last[u];p;p=pre[p])
int v=other[p];
if (col[v]==0)
col[v]=3-col[u];
return dfs(v);
else if (col[v]==col[u]) return 0;
return 1;
int main()
while (1)
scanf("%d",&n);
if (n==0) break;
memset(last,0,sizeof last);
memset(col,0,sizeof col);
while (1)
int a,b;
scanf("%d%d",&a,&b);
if (a==0) break;
connect(a,b);
connect(b,a);
col[1]=1;
if (dfs(1)) printf("YES\\n");else printf("NO\\n");
return 0;
以上是关于UVA 11396的主要内容,如果未能解决你的问题,请参考以下文章
uva 11396Claw Decomposotion(二分图判定)
UVA 10972 - RevolC FaeLoN(边-双连通分量)