어흥

[백준 15591] MooTube (Silver) (C++) 본문

알고리즘/백준

[백준 15591] MooTube (Silver) (C++)

라이언납시오 2020. 6. 23. 16:41
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/15591

 

15591번: MooTube (Silver)

문제 농부 존은 남는 시간에 MooTube라 불리는 동영상 공유 서비스를 만들었다. MooTube에서 농부 존의 소들은 재밌는 동영상들을 서로 공유할 수 있다. 소들은 MooTube에 1부터 N까지 번호가 붙여진 N (

www.acmicpc.net

1. 주의할 점

- 시작하는 정점은 세지 않는다

 

2. 구현

- 그래프에 대한 정보를 V[] 벡터에 입력한다

- Query문 마다 Result, Visit[] 배열을 초기화하고 시작한다

- While문을 통해 방문하지 않은 Node중에서 간선의 값이 입력 받은 유사도의 값이상이면 큐에 추가하며 Result++한다

 

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct info {
	int idx, val;
};
info tmp;
vector<info> v[5001];
bool visit[5001];
int node, query, from, to, val, usado, start, result;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> node >> query;
	for (int i = 0; i < node-1; i++) {
		cin >> from >> to >> val;
		tmp.idx = to;
		tmp.val = val;
		v[from].push_back(tmp);
		tmp.idx = from;
		v[to].push_back(tmp);
	}
	for (int i = 0; i < query; i++) {
		cin >> usado >> start;
		//초기화
		for (int j = 1; j <= node; j++)
			visit[j] = false;
		result = 0;
		visit[start] = true;
		queue<int> q;
		q.push(start);
		while (!q.empty()) {
			int cidx = q.front();
			q.pop();
			for (int j = 0; j < v[cidx].size(); j++) {
				int next = v[cidx][j].idx;
				if (visit[next]) continue;
				int nv = v[cidx][j].val;
				if (nv >= usado) {
					visit[next] = true;
					result++;
					q.push(next);
				}
			}
		}
		cout << result << '\n';
	}
	return 0;
}
728x90
반응형
Comments