fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 17241 (C++) Pineapple Advertising
최초 업로드: 2025-10-03 06:58:02
최근 수정 시간: 2025-10-03 06:58:02
게시자: rlatjwls3333
카테고리: 백준
조회수: 4
# [Silver I] Pineapple Advertising [문제 링크](https://www.acmicpc.net/problem/17241) ## 문제 설명 <p>병찬이는 파인애플을 매우 좋아하며, 특히 파인애플 피자를 매우 좋아한다. 병찬이는 파인애플 피자의 멋짐을 설파하기 위해 한 마을에 파인애플 피자를 광고를 하려고 한다.</p> <p>이 마을은 총 <em>N</em>개의 집이 있고, 이 <em>N</em>개의 집은 모두 파인애플 피자를 싫어한다. 그 리고 이 마을에는 <em>M</em>개의 길이 있고, 각 길은 특정 두 집을 연결하고 있다. 길의 구성에 따라, 어떤 집은 어떠한 길과도 연결되어 있지 않을 수 있다. 병찬이는 파인애플 피자를 특정 집에 전해줄 수 있다. 그러면 맛있는 파인애플 피자의 냄새로 인해 파인애플 피자를 전달받은 집과, 그 집과 길로 직접 연결된 집들은 파인애플 피자를 좋아하게 된다.</p> <p>병찬이는 이 마을에 있는 집 중에 <em>Q</em>개의 집에 파인애플 피자를 전해주려고 한다. 물론 한번 피자를 전해준 집에 다시 피자를 전해줄 수 있다. 이 때, 첫 번째 집부터 <em>Q</em>번째 집까지 피자를 배달할 때마다 얼마나 많은 수의 집이 파인애플 피자를 좋아하게 되었는지를 알고 싶다. 병찬이를 도와서 얼마나 많은 집이 파인애플 피자를 좋아하게 되었는지 구해보자.</p> ## 입력 <p>첫 줄에 <em>N</em>, <em>M</em>, <em>Q</em>가 주어진다. (1 ≤ <em>N</em> ≤ 200,000, 0 ≤ <em>M</em> ≤ 1,000,000)</p> <p>두 번째 줄부터 <em>M</em> + 1번째 줄까지 <em>a</em><sub>i</sub>, <em>b</em><sub>i</sub>가 주어진다.(1 ≤ <em>a</em><sub>i</sub>, <em>b</em><sub>i</sub> ≤ <em>N</em>) 이는 집 <em>a</em><sub>i</sub>와 집 <em>b</em><sub>i</sub>가 길로 연결되어 있다는 것을 의미한다.</p> <p>그 뒤 <em>Q</em>(1 ≤ <em>Q</em> ≤ 200,000)개의 줄에 걸쳐 피자를 전달할 집의 번호 <em>n</em><sub>i</sub>가 주어진다.</p> ## 출력 <p><em>Q</em>개의 정수를 출력한다. i번째 정수는 병찬이가 집 <em>n</em><sub>i</sub>에 파인애플 피자를 주었을 때, 새로이 파인애플 피자를 좋아하게 된 집의 개수를 의미한다.</p> <p>이미 파인애플 피자를 좋아하고 있는 집은 새로이 파인애플 피자를 좋아하게 된 것 으로 취급하지 않는다.</p> ## 풀이 탐색을 시작하는 정점과 직접 이어진 정점을 간선을 지우면서 방문 처리하면 시간 안에 돕니다. ``` c++ #include<bits/stdc++.h> using namespace std; const int MAX = 200'001; bool visited[MAX]; vector<vector<int>> conn(MAX); int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, q; cin >> n >> m >> q; while(m--) { int a, b; cin >> a >> b; conn[a].push_back(b); conn[b].push_back(a); } while(q--) { int cur; cin >> cur; int cnt = !visited[cur]; visited[cur]=true; for(int next:conn[cur]) { if(!visited[next]) { cnt++; visited[next]=true; } } conn[cur].clear(); cout << cnt << '\n'; } } ```