-
[BOJ] 1922 : 네트워크 연결
1922 : 네트워크 연결 풀이 계절이 지나가는 하늘에는 가을로 가득 차 있습니다. 코드 #include <stdio.h> #include <vector> #include <algorithm> using namespace std; const int n_ = 1e3 + 1; const int m_ = 1e5 + 1; struct node { int u, v, w; } edg[m_]; int p[n_]; inline int find(int u) { if (u == p[u]) return u; return p[u] = find(p[u]); } void merge(int u, int v) { u = find(u), v = find(v);...
-
[BOJ] 1937 : 욕심쟁이 판다
1937 : 욕심쟁이 판다 풀이 dfs를 돌리자! 코드 #include <stdio.h> const int dx[] = { 0,0,-1,1 }; const int dy[] = { -1,1,0,0 }; const int n_ = 500 + 5; int n, a[n_][n_], dp[n_][n_]; inline int max(int a, int b) { return a > b ? a : b; } int dfs(int x, int y) { if (dp[x][y]) return dp[x][y]; dp[x][y] = 1; for (int i = 0; i < 4; i++) { int...
-
[BOJ] 2839 : 설탕배달
2839 : 설탕배달 풀이 dp[i] = min(dp[i-3], dp[i-5]) + 1로 두고 풀면 된다. n이 5천개니까 max를 대충 1600?쯤 잡으면 3으로 꽉채워도 최대 해보다 작고 max를 5천개 더해도 int 안쪽이니까 max를 2222로 잡았다. 코드 #include <stdio.h> int min(int a, int b) { return a < b ? a : b; } int main() { int n, i, a[5001]; scanf("%d", &n); for (i = 0; i <= n; i++) a[i] = 2222; a[3] = a[5] = 1;...
-
[BOJ] 1261 : 알고스팟
1261 : 알고스팟 풀이 다익스트라를 변형해보자 dp랑 적당히 섞어보자 코드 #include <cstdio> #include <queue> using namespace std; const int dx[] = { 0,0,-1,1 }, dy[] = { -1,1,0,0 }; const int n_ = 100 + 5; struct edg { int x, y, w; bool operator <(edg A)const { return w > A.w; } }; int main() { int n, m, chk[n_][n_] = {}; char a[n_][n_]; priority_queue<edg> pq; scanf("%d %d\n", &m, &n); for (int i =...
-
[BOJ] 1197 : 최소 스패닝 트리
1197 : 최소 스패닝 트리 풀이 크루스칼을 하자. 코드 #include <stdio.h> #include <vector> #include <algorithm> using namespace std; const int n_ = 1e4 + 1; const int m_ = 1e5 + 1; struct node { int u, v, c; bool operator <(node A)const { return c < A.c; } } edg[m_]; int n, m; int mom[n_]; int find(int u) { if (u == mom[u]) return u; return mom[u] = find(mom[u]); } void merge(int u, int...