본문 바로가기

Algorithm Problems/그래프

(50)
[백준/C++] 13565번: 침투 문제https://www.acmicpc.net/problem/13565문제 요약M × N 크기의 격자로 표현되는 섬유 물질이 있다. 각 격자는 0이라면 전류가 잘 통하고, 1이라면 전류가 통하지 않는다. 위쪽을 바깥쪽, 아래쪽을 안쪽이라고 생각했을 때, 바깥쪽에서 흘려 준 전류가 안쪽까지 침투될 수 있는지를 출력한다.코드#include #include #define MAX 1000using namespace std;int n, m;char board[MAX][MAX];bool check[MAX][MAX];bool flag = false;int dx[4] = { 0, 0, 1, -1 };int dy[4] = { 1, -1, 0, 0 };void dfs(int x, int y) { check[x][y] = ..
[백준/C++] 16562번: 친구비 문제 https://www.acmicpc.net/problem/16562 16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (1 ≤ Ai ≤ 10, www.acmicpc.net 문제 요약 N명의 학생이 있을 때, 각 학생들과 친구가 되기 위해 필요한 비용, 친구비가 주어진다. 현재 k원이 있을 때, 모든 학생과 친구가 되기 위한 최소 비용을 출력한다. + "친구의 친구는 친구다"를 이용하면, 모든 친구에게 친구비를 지불하지 않아도 된다. 코드 #include #define MAX_N 10000 us..
[백준/C++] 16953번: A -> B 문제 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A 1. 2를 곱한다. 2. 1을 수의 가장 오른쪽에 추가한다. 코드 #include #include #define ll long long using namespace std; ll a, b; ll res = 1e9; void dfs(ll x, ll cnt) { // a가 연산을 거쳐서 b가 되었다면 if (x == b) { res = min(res, cnt); // 최소 연산 횟수 갱신 ret..
[백준/C++] 1240번: 노드사이의 거리 문제 https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍 www.acmicpc.net 문제 요약 N개의 노드로 이루어진 트리가 주어졌을 때, M개의 두 노드 쌍을 입력 받고 두 노드 사이의 거리를 출력한다. 코드 #include #include #include #include #define MAX_N 1000 using namespace std; int n, m; int start_node, end_node; bool visited[MAX_N + 1]; v..
[백준/C++] 1068번: 트리 문제 https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 문제 요약 N개 노드로 이루어진 트리에서 각 노드들의 부모 노드의 정보를 입력 받는다. + 0번 노드 ~ N - 1번 노드까지 존재한다. 해당 트리에서 노드 하나를 지웠을 때, 리프 노드의 개수를 출력한다.+ 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 코드 #include #include #define MAX_N 50 using namespace std; int n..
[백준/C++] 1647번: 도시 분할 계획 문제 https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 문제 요약 n개의 집과 m개의 길로 이루어져 있는 마을이 있다. 각 길에는 길을 유지하는데 드는 유지비가 있다. 마을에 길이 너무 많으므로, 길을 없애 유지비의 합을 최소로 하는 2개의 마을로 분할해야한다. 이에 발생하는 비용을 출력한다. 코드 #include #include #include #include #include #define MAX_N 100..