UVA 11396 - Claw Decomposition(二分图判定)

来源:互联网 发布:java get set方法解释 编辑:程序博客网 时间:2024/06/05 18:03

UVA 11396 - Claw Decomposition

题目链接

题意:给定一个无向图,问是否能把这个无向图分解为如图的爪形,边只能用一次,点能用多次

思路:分析一下会发现,其实就是一个二分图判定,把中间的染一个颜色,周围几个就是另一个颜色,由于保证是一个简单无向图,所以做一次二分图判定即可

代码:

#include <cstdio>#include <cstring>#include <vector>#include <stack>using namespace std;const int N = 305;vector<int> g[N];int n, color[N];bool bipartite(int u) {for (int i = 0; i < g[u].size(); i++) {int v = g[u][i];if (color[u] == color[v]) return false;if (!color[v]) {color[v] = 3 - color[u];if (!bipartite(v)) return false;}}return true;}int main() {while (~scanf("%d", &n) && n) {for (int i = 1; i <= n; i++) {g[i].clear();color[i] = 0;}int u, v;while (scanf("%d%d", &u, &v)) {if (u == 0 && v == 0) break;g[u].push_back(v);g[v].push_back(u);}color[1] = 1;if (bipartite(1)) printf("YES\n");else printf("NO\n");}return 0;}


0 0
原创粉丝点击