[λ°±μ€,c++] 1043λ² - κ±°μ§λ§
λ¬Έμ
1043λ²: κ±°μ§λ§
μ§λ―Όμ΄λ νν°μ κ°μ μ΄μΌκΈ° νλ κ²μ μ’μνλ€. νν°μ κ° λλ§λ€, μ§λ―Όμ΄λ μ§λ―Όμ΄κ° κ°μ₯ μ’μνλ μ΄μΌκΈ°λ₯Ό νλ€. μ§λ―Όμ΄λ κ·Έ μ΄μΌκΈ°λ₯Ό λ§ν λ, μλ κ·Έλλ‘ μ§μ€λ‘ λ§νκ±°λ μμ²λκ²
www.acmicpc.net
μ½λ
#include <iostream>
#include <vector>
using namespace std;
int parent[101];
int N, M;
void union_parent(vector<vector<int>> &party){
for(int i=0; i<party.size(); i++){
bool flag = false;
for(int k=0; k<party[i].size(); k++){
if(parent[party[i][k]] == -1){
flag = true;
break;
}
}
if(flag){
for(int k=0; k<party[i].size(); k++){
parent[party[i][k]] = -1;
}
}
}
for(int i=party.size()-1; i>=0; i--){
bool flag = false;
for(int k=0; k<party[i].size(); k++){
if(parent[party[i][k]] == -1){
flag = true;
break;
}
}
if(flag){
for(int k=0; k<party[i].size(); k++){
parent[party[i][k]] = -1;
}
}
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
int know; cin>>know;
for(int i=0; i<know; i++){
int peo; cin>>peo;
parent[peo] = -1;
}
vector<vector<int>> party;
for(int i=0; i<M; i++){
int cnt; cin>>cnt;
vector<int> temp;
for(int k=0; k<cnt; k++){
int peo; cin>>peo;
temp.push_back(peo);
}
party.push_back(temp);
}
int cnt = 50;
while(cnt--) union_parent(party);
int ans = 0;
for(int i=0; i<party.size(); i++){
bool flag = true;
for(int k=0; k<party[i].size(); k++){
if(parent[party[i][k]] == -1){
flag = false;
break;
}
}
if(flag) ans ++;
}
cout<<ans;
}
νμ΄
λ¬Έμ λΆλ₯λ μ λμ¨ νμΈλμ΄μ§λ§ μ λ ₯κ°μ΄ 50λ°μ λ€μ΄μ€μ§ μκΈ° λλ¬Έμ λΈλ£¨νΈν¬μ€λ₯Ό μ΄μ©ν΄μ ꡬνμΌλ‘ νμμ΅λλ€.
μ§μ€μ μλ μ¬λμ κ²½μ° parent[μ¬λ] = -1λ‘ μΈν ν΄μ£Όκ³ , λͺ¨λ νν°λ₯Ό νμνλ©΄μ μ§μ€μ μλ μ¬λμ΄ ν΄λΉ νν°μ μ‘΄μ¬νλ κ²½μ° κ·Έ νν°μ μ‘΄μ¬νλ λͺ¨λ μ¬λμ μ§μ€μ μλ μ¬λμΌλ‘ μΈν νμ΅λλ€.
input:
4 5
1 1
1 1
1 2
1 3
2 4 2
2 4 1
answer: 1
λ€λ§ μμ κ°μ μ λ ₯μ²λΌ νν°μ μμμ μμ‘΄νμ§ μμμΌ νκΈ° λλ¬Έμ νν° νμμ μμμ λλ κ²½μ°μ λ€μμ λλ κ²½μ°λ‘ μννμ΅λλ€.
input:
6 5
1 6
2 4 5
2 1 2
2 2 3
2 3 4
2 5 6
answer: 0
λν νν° νμμ μ λ€λ‘ μ΄ ν λ²λ§ νλ κ²½μ° μμ κ°μ μ λ ₯μμ μ¬λ 2, 3μ΄ κ°±μ λμ§ μκΈ° λλ¬Έμ νν°μ μ΄ κ°―μμΈ 50λ§νΌ λ°λ³΅νλλ‘ μννμ΅λλ€.