티스토리 뷰

알고리즘/BOJ

[백준] 2099 The game of death

세진짱 2018. 6. 15. 01:39


더 게임 오브 데.. 스.. 어렵다...

K개 간선을 지나서 A->B로 갈 수 있다면 death 아니면 life다.

생각이 안나서 폭풍도움을 받고 A^k을 하고 A[i][j]가 1이라면

i->j라는 사실을 알았따...


생각해보니까 이산수학에서 transitive closure로 나온 것 같다.

길이가 n인 path가 있으려면 A^n해서 확인했었다...!

잘 기억해둬야겠다..


행렬곱 n^3 * K(1,000,000) 이니까 정직하게 곱하면 시간안에 못푼다..!

그래서 A^k를 log만에 구하는 방법으로 구현해야한다!


하지만 내 소스는 결국 틀렸다 ㅎㅎ..60..%..

백준의 코드를 보며 공..부..하고.. 풀었다..!

코드 깨끗하게 잘짜는 연습 해야겠다 ㅎㅎ


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef vector<vector<bool>> Matrix;
Matrix operator * (const Matrix &a, const Matrix &b) {
    int n = a.size();
    Matrix c(n, vector<bool>(n));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (a[i][k] * b[k][j]) c[i][j] = 1;
            }
        }
    }
    return c;
}
Matrix go(Matrix x, int y) {
    int n = x.size();
    Matrix ans(n, vector<bool>(n));
    //행렬 항등원
    for (int i = 0; i < n; i++) ans[i][i] = 1;
 
    while (y > 0) {
        if (y & 1) ans = ans*x;
        else x = x*x;
        y /= 2;
    }
    return ans;
}
int main() {
    int n, m, k; scanf(" %d %d %d"&n, &k, &m);
    Matrix x(n, vector<bool>(n));
    for (int i = 0; i < n; i++) {
        int a, b; scanf(" %d %d"&a, &b);
        a--; b--;
        x[i][a] = x[i][b] = 1;
    }
    Matrix ans = go(x, k);
    for (int i = 0; i < m; i++) {
        int a, b; scanf(" %d %d"&a, &b);
        a--; b--;
        if (ans[a][b]) puts("death");
        else puts("life");
    }
}
cs


'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 12930 두 가중치  (0) 2018.06.16
[백준] 1412 일방통행  (0) 2018.06.15
[백준] 1165 도로포장  (0) 2018.06.06
[백준] 15806 영우의 기숙사 청소  (2) 2018.06.05
[백준] 1948 임계경로  (0) 2018.06.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함