-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathP924.cpp
55 lines (55 loc) · 1.05 KB
/
P924.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
int main() {
int N, E, F, T; // Number of employees
vector<int> friends[2501];
while(cin >> N) {
FORI(N)
friends[i].clear();
FORI(N) {
cin >> E;
FORJ(E) {
cin >> F;
if(F != i)
friends[i].push_back(F);
}
}
cin >> T; // Test cases:
FORI(T) {
cin >> E;
if(friends[E].empty()) {
cout << 0 << endl;
}
else {
// Push waves:
vector<int> v;
set<int> seen;
v.push_back(E);
seen.insert(E);
int wave = -1;
int maxWaveSize = -1;
int maxWave = -1;
while(!v.empty()) {
++wave;
if(wave > 0 && maxWaveSize < (int)v.size()) {
maxWaveSize = (int)v.size();
maxWave = wave;
}
// Handle wave:
vector<int> w;
FORIT(vector<int>, v) {
int e = *it;
FORIT2(vector<int>, friends[e]) {
int e2 = *it2;
if(seen.find(e2) != seen.end())
continue; // already seen.
seen.insert(e2);
w.push_back(e2);
} // FORIT2
} // FORIT
v = w;
} // while(!v.empty())
cout << maxWaveSize << " " << maxWave << endl;
} // else
}
}
return 0;
}