---
tags: uva
---
# Uva10505 - Montesco vs Capuleto
## 題目大意
有一對新人想舉辦婚禮,但他們的朋友之中有些關係不太好,我們要找到關係良好且最多的人數
## 重點觀念
- dfs
- 塗色
## 分析
- 給這些人塗色,若有提對關係則為另一個顏色,遇到衝突的顏色時跳開
## 程式題目碼
```cpp=
#include <iostream>
#include <vector>
using namespace std;
vector<int> graph[300];
int color[300];
void dfs(int cur, int cur_color, int& A, int& B, bool& flag) {
if (color[cur] != -1)
flag &= (color[cur] == cur_color);
else {
color[cur] = cur_color;
A++;
for (auto i = graph[cur].begin(); i != graph[cur].end(); i++)
dfs(*i, 1 - cur_color, B, A, flag);
}
}
int main() {
int M;
cin >> M;
while (M--) {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
color[i] = -1;
graph[i].clear();
}
for (int i = 0; i < N; i++) {
int p;
cin >> p;
for (int j = 0; j < p; j++) {
int enemy;
cin >> enemy;
enemy--;
if (enemy >= N) {
continue;
}
graph[i].push_back(enemy);
graph[enemy].push_back(i);
}
}
int ans = 0;
for (int i = 0; i < N; i++) {
if (color[i] == -1) {
int A = 0;
int B = 0;
bool flag = true;
dfs(i, 0, A, B, flag);
if (flag) {
ans += max(A, B);
}
}
}
cout << ans << endl;
}
return 0;
}
```