[๋ฐฑ์ค] 5567 ๊ฒฐํผ์ ๊ตฌํ
๋ฌธ์ :
https://www.acmicpc.net/problem/5567
5567๋ฒ: ๊ฒฐํผ์
2์ 3์ ์๊ทผ์ด์ ์น๊ตฌ์ด๋ค. ๋, 3๊ณผ 4๋ ์น๊ตฌ์ด๊ธฐ ๋๋ฌธ์, 4๋ ์๊ทผ์ด์ ์น๊ตฌ์ ์น๊ตฌ์ด๋ค. 5์ 6์ ์น๊ตฌ๋ ์๋๊ณ , ์น๊ตฌ์ ์น๊ตฌ๋ ์๋๋ค. ๋ฐ๋ผ์ 2,3,4 3๋ช ์ ์น๊ตฌ๋ฅผ ๊ฒฐํผ์์ ์ด๋ํ๋ค.
www.acmicpc.net
๋ถ์ :
๊ฒฐํผ์์ ์ฌ ๋๊ธฐ๋ค ์ค ๋ด ์น๊ตฌ, ๋ด ์น๊ตฌ์ ์น๊ตฌ๋ง ์ด๋ ํ๋ ค๋ฉด ๋ช๋ช ์ด๋ ํด์ผ ๋ฌป๋ ๋ฌธ์ ์๋ค.
์น๊ตฌ ๊ด๊ณ๋ฅผ friends vector์ ๋ฃ์ด friends[์น๊ตฌ] = ["์น๊ตฌ์ ์น๊ตฌ๋ค ๋ฆฌ์คํธ"] ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ง๋ง
* ์ฃผ์ ํด์ผ ํ ์ ์ด ์๋ค.
์น๊ตฌ์ ์น๊ตฌ๊ฐ ๋ด ์น๊ตฌ์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ฐ์ ๋ด ์น๊ตฌ๋ค๋ง queue์ ๋ฃ์ด result ๊ฐ์ ์ฆ๊ฐ์์ผ์ค ๋ค์ queue์ ์๋ ์น๊ตฌ๋ฅผ next๋ก ์ฐพ์
๋ด ์น๊ตฌ์ ์น๊ตฌ๊ฐ ์ด๋ฏธ ๋ด ์น๊ตฌ์ธ ๊ฒฝ์ฐ check ๋ฐฐ์ด์์ true๊ฐ ๋์์ ๊ฒ์ด๋ฏ๋ก if ๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์๊ฒ ๋ง๋ค์๋ค.
๊ทธ๋์ ์น๊ตฌ์ ์น๊ตฌ๊ฐ ์ด๋ฏธ ๋ด ์น๊ตฌ๋ก main ํจ์์์ result ๊ฐ์ด ์ฆ๊ฐ ๋์๋๋ฐ find_real_friends์ ์ค๋ณต๋์ง ์๊ฒ ํด์คฌ๋ค !
c++ ์ฝ๋ :
//
// 5567_wedding.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/05/07.
//
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <string.h>
using namespace std;
int N;
int Tcase;
int result = 0;
vector<int> friends[501];
int check[501];
queue<pair<int, int>> q;
void find_real_friends(){
while(!q.empty()){
int next;
if(q.front().first == 1){
next = q.front().second; // ์น๊ตฌ
}else{
next = q.front().first; // ์น๊ตฌ
}
check[next] = true;
for(int i = 0; i < friends[next].size(); i++){ // ์น๊ตฌ์ ์น๊ตฌ
if(check[friends[next][i]] == false){
check[friends[next][i]] = true;
result++;
}
}
q.pop();
}
}
int main(){
cin >> N;
cin >> Tcase;
memset(check, false, sizeof(check));
for(int i = 1; i <= Tcase; i++){
int a, b;
cin >> a >> b;
if(a == 1 || b == 1){
q.push({a, b}); // ๋ด ์น๊ตฌ๋ค๋ง push
check[a] = check[b] = true;
result++;
}
friends[a].push_back(b);
friends[b].push_back(a);
}
find_real_friends();
cout << result << '\n';
return 0;
}