[λ°±μ€(BOJ)] μ κ΅¬μΆ μμ (16437) C++
λ¬Έμ : BOJ_16437λ² μ κ΅¬μΆ μμ
λ¬Έμ μ€λͺ
μμμ λ ¬, bfs
μ λͺ©λ§ κ·μ½κ³ λ¬Έμ λ μ§κ·Έλ¬μ΄ μ κ΅¬μΆ μμ μ λλ€.
λ¬Έμ μ μ νν μ μλμ΄ μλ '1λ² μ¬μΌλ‘ κ°λ κ²½λ‘λ μ μΌ' μ μ£Όμν΄μ μ½μ΄μΌ νκ³ , κ° μ¬μ μ νΉμ λλκ° μλ λ°,
μ¬μ μμ΄ μλ€λ©΄ λ€μ μ¬μΌλ‘ λμ΄κ°λ μμ μκ° λμ λκ³ , λλκ° μλ€λ©΄ λλμ μλ§νΌ μμ μκ° μ€μ΄λ€κ³ , μμ ν λ§λ¦¬ μ‘μλ¨Ήμ λλλ λ μ΄μ μμ μ‘μλ¨Ήμ§ μκΈ° λλ¬Έμ λλμ μλ μ€μ κ²κ³Ό κ°μ΅λλ€.
λ¬Έμ μμ μΉμ νκ² κ·Έλ¦Όμ μ μν΄μ£Όμλλ°,
(λ λ²μ§Έ ν
μ€νΈ μΌμ΄μ€μ λν κ·Έλ¦Ό)
n λ² μ§Έ μ¬κ³Ό μ°κ²°λ μ¬λ€μ λͺ¨λ μμ΄ λμ λμ΄ n λ² μ§Έ μ¬μ λμ°©νλ λ°©μμ λλ€. μ¦, μμ λμ μλ₯Ό νμ νκΈ° μν΄μλ μλΌ λ Έλμ λμ λ μμ λͺ¨λ λν λ€ μ΄λ―Έ λ Έλμ λμ ν΄μΌ λλλ°, μ΄λ¬ν κ³Όμ μμ μμμ λ ¬μ μ¨μΌ ν¨μ μ μ μμ΅λλ€.
Solution
μμμ λ ¬μ μ΄μ©ν¨μ μμ΄μ dfsμ bfsλ₯Ό μ¬μ©ν μ μλλ°, μ λ bfsλ₯Ό μ¬μ©νκ³ λμ λ μμ μλ₯Ό νλ¨ν λλ λ€μ λ κ°μ§κ° μ€μν©λλ€.
(1) λλλ§ λ¨μ μλΌ λ Έλμ μ¬μμλ μ΄λ―Έ λ Έλμκ² 0μ μμ μλ₯Ό λμ ν΄μ€λ€.
(2) λ€μ μ¬μ λμ°©ν μμ μκ° λλμ μ λ³΄λ€ μ μ μμ, κ·Έ μ¬μ λλ μλ₯Ό λλ μ - λμ°©ν μμ μλ‘ λ°κΏμ€λ€.
μ΄λ¬ν κ·μΉμΌλ‘ i λ² μ§Έ μ¬μ indegree[i]κ° 0μ΄ λλ©΄ νΈμ ν΄μ£Όλ λ°©μμΌλ‘ μμμ λ ¬μ μ§νν©λλ€.
μ΅μ’ μ μΌλ‘ 1λ² μ¬μμ 1λ² μ¬κ³Ό μ°κ΄λ μλΌ λ Έλλ₯Ό λͺ¨λ νμνκΈ° λλ¬Έμ λ§μ§λ§μΌλ‘ λμ°©ν μμ μλ₯Ό νμΈν μ μμ΅λλ€.
Description
- *ν μ¬μ λ¨Έλ¬Ό μ μλ μκ³Ό λλ μκ° μ΅λ 10^9, μκ³Ό λλκ° μμ μ μλ μ¬μ κ°μλ μ΅λ 123,456-1 => 10^9 * (123,456-1)μ intνμ λ²μλ₯Ό μ΄κ³Όν¨μΌλ‘ long longνμ μ΄μ©ν΄ %lldλ‘ μΆλ ₯ν΄μ£Όμ΄μΌ ν©λλ€.
- μ λ ₯ μ, μ¬μ κ°μλ₯Ό μ λ ₯λ°κ³ λ°λ‘ char νμΈ tiμ μ λ ₯λ°κΈ° λλ¬Έμ μν°μ μν λ²νΌλ₯Ό μκ°ν΄μ£Όμ§ μλλ€λ©΄ μ λ ₯ μ μ€λ₯κ° μκΉλλ€.
- λ²νΌλ₯Ό κ³ λ €νμ¬ μ λ ₯μ λ°λ κ²½μ°λ λ κ°μ§κ° μμ΅λλ€.
(1) cinκ³Ό getchar()λ₯Ό μ΄μ©νλ κ²½μ°, (2) scanf()λ₯Ό μ΄μ©νλ κ²½μ°
ν
μ€νΈ μΌμ΄μ€μ μλ₯Ό roof, μ, λλ μ¬λΆλ₯Ό t, μ¬μ μλ λλ¬Ό μλ₯Ό a, λ€μ μ¬μ λ²νΈλ₯Ό pλΌκ³ νκ³ (1),(2) λ² λͺ¨λ μ
λ ₯λ°λ κ²½μ°λ₯Ό μμλ³΄κ² μ΅λλ€.
λ²νΌλ₯Ό κ³ λ €νμ¬ μ λ ₯λ°κΈ°
//(1)
#include <iostream>
using namespace std;
int roof, p;
char t;
long long a;
int main() {
cin >> roof;
getchar(); // getchar()λ‘ λ²νΌλ₯Ό λ°μμ€**
for (int i = 0; i < roof; i++) {
cin>>t>>a>>p;
}
}
//(2)
#include <iostream>
using namespace std;
int roof, p;
char t;
long long a;
int main() {
scanf("%d", &roof);
for (int i = 0; i < roof; i++) {
scanf(" %c%lld%d", t, a, p); // λμ΄μ°κΈ°λ‘ λ²νΌλ₯Ό μ‘μμ€ **
}
}
μμ κ°μ΄ λ²νΌλ₯Ό λ°μ μ€ μ μμ΅λλ€.
Solution Code
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int roof, line[123457], vis[123457];
long long pm[123457], res;
vector<int> adj[123457];
queue<int> q;
int main(void) {
scanf("%d", &roof);
for (int i = 2; i <= roof; i++) {
char t;
long long a; // long long ν!! ***
int p;
scanf(" %c%lld%d", &t, &a, &p); // λμ΄μ°κΈ°λ‘ λ²νΌ λ°κΈ°
if (t == 'S') pm[i] = a;
else if (t == 'W') pm[i] = -a;
adj[i].push_back(p);
line[p]++; // line == indegree
}
for (int i = 1; i <= roof; i++) {
if (line[i] == 0) q.push(i);
}
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
if (pm[now] >= 0) pm[next] += pm[now]; /* 0 μ΄μμ΄λΌλ©΄ λ€μ μ¬μ λμ ,
μμ μκ° +, λλμ μκ° - μμΌλ‘ λ€μ΄μ¨ μμ μ λ§νΌ λλκ° ν λ§λ¦¬λ§ λ¨Ήκ²λλ€.*/
line[next]--;
if (line[next] == 0) q.push(next);
}
}
printf("%lld\n", pm[1]); // %lldλ‘ μΆλ ₯!! ***
return 0;
}
'Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] ACM Craft(1005) (0) | 2022.03.05 |
---|---|
[BOJ] μ΄λͺ¨ν°μ½(14226) (0) | 2022.03.05 |
[BOJ] μλΌμΉκΈ°(17291) (0) | 2022.03.05 |
[BOJ] λ¬Έμ μ§(1776) (0) | 2022.03.05 |
[BOJ] ν볡ν μμ(10434) (0) | 2022.03.05 |