SGU 121.Bridges painting
题意:
新百慕大由N个岛屿组成,在岛屿之间有一些连接它们的桥。在任意两个岛屿之间,最多只有一座桥连接它们。总统先生下达命令,要求给所有桥上色。
每一座桥能被染成 白色 或者 黑色。
每一个岛屿至少有一座白色的桥和一座黑色的桥(当然,如果只有一座桥就不存在这些问题)
Solution:
很简单的dfs,水水就能过。
代码
#include <iostream>
#include <cstring>
#define INF 111
using namespace std;
int edge[INF][INF], color[INF][INF], sed[INF];
int n, x, sum, t;
void dfs (int x, int k) {
for (int i = 1, j; i <= sed[x]; i++) {
j = edge[x][i];
if (!color[x][j]) {
color[x][j] = color[j][x] = k == 0 ? 2 : 1;
dfs (j, k ^ 1);
k ^= 1;
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
while (cin >> x && x != 0)
edge[i][++sed[i]] = x;
for (int i = 1; i <= n; i++)
if (sed[i] & 1) dfs (i, 1);
for (int i = 1; i <= n; i++)
dfs (i, 1);
for (int i = 1, k; i <= n; i++) {
if (sed[i] <= 1) continue;
k = 0;
for (int j = 1; j <= sed[i]; j++) {
k |= color[i][edge[i][j]];
}
if (k != 3) {t = 0;cout << "No solution"; return 0;}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= sed[i]; j++) {
int p = edge[i][j];
cout << color[i][p] << ' ';
}
cout << 0 << endl;
}
}

浙公网安备 33010602011771号