λ°±μ€ 1953
λ¬Έμ
νμ΄
κ²°κ΅ μ΄λΆκ·Έλνλ₯Ό λ§λλ λ¬Έμ λ€.
5
1 3
1 5
2 1 4
1 3
1 2
μ κ²½μ°λ₯Ό μλ‘ λ€μ.
μ«μ΄νλ κ΄κ³λ₯Ό μ ν₯κ·Έλνλ‘ κ·Έλ¦¬λ©΄ μ΄λ κ² λνλΌ μ μλ€.
μ¬κΈ°μ 1λ²λ ΈλλΆν° μ²νμ λ€μ΄κ°λ€κ³ κ°μ νμ. κ·Έλ κ² λλ€λ©΄ 1λ² λ Έλλ 3λ²μ μ«μ΄νλ―λ‘ 3λ²μ 무쑰건 λ°±νμ λ€μ΄κ°κ² λλ€.
3λ²μ κΈ°μ€μΌλ‘ 3λ²λ Έλλ 4λ²μ μ«μ΄νλ―λ‘ 4λ²λ Έλλ μ²νμ λ€μ΄κ°κ² λλ€.
4λ²λ Έλλ μ«μ΄νλ λ Έλκ° μμΌλ―λ‘, λ€μ 2λ²λ ΈλλΆν° μ²νμ λ£κ³ μμνκ² λλ€λ©΄
λ€μκ³Ό κ°μ κ·Έλνκ° κ·Έλ €μ§κ² λλ€.
μ«μ΄νλ μ¬λμ΄ νλλ μλ κ²½μ°λ μμΌλ―λ‘, νλͺ λ§ μ«μ΄νλμ¬λμ΄ νλͺ μλ κ²½μ°κ° νμμ κΈ°μ€μμ κ°μ₯ μ€λ 걸리λ κ²½μ°λ€.
λͺ¨λ λ Έλλ₯Ό νλ²μ©λ§ λ°©λ¬Ένλ©΄ λλ―λ‘ O(N)μ΄λ€.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int> > v(101);
int n, vis[101], blue[101], white[101], bans, wans;
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
int a; cin>>a;
while(a--) {
int b; cin>>b;
v[i].push_back(b);
}
}
for(int i=1; i<=n; i++) {
if(vis[i]) continue;
vis[i] = 1;
blue[i] = 1; bans += 1;
queue<int>q;
q.push(i);
while(!q.empty()) {
int cur = q.front(); q.pop();
for(auto e : v[cur]) {
if(vis[e]) continue;
vis[e] = 1;
if(blue[cur]) {
white[e] = 1;
wans += 1;
}
if(white[cur]) {
blue[e] = 1;
bans += 1;
}
q.push(e);
}
}
}
cout<<bans<<'\n';
for(int i=1; i<=n; i++)
if(blue[i]) cout<<i<<' ';
cout<<'\n';
cout<<wans<<'\n';
for(int i=1; i<=n; i++)
if(white[i]) cout<<i<<' ';
}