기본 콘텐츠로 건너뛰기

1005 : ACM CRAFT (Dynamic Programming) (TopologicalSort) [C,C++]

The key to this problem is to sort through the topological sorting algorithm and solve the problem.

The topological sorting algorithm is to list the vertices on the graph in order.

==========================================================
public static int[] topologicalSort(boolean[][] adj, int[] indegree, int[] time)
{
    Queue<Integer> q = new LinkedList<>();
    int len = indegree.length;
    int[] result = new int[len];
    for (int i = 1; i < len; i++) {
        if (indegree[i] == 0) {
            result[i] = time[i];
            q.add(i);
            break;
        }
    }
    while (!q.isEmpty()) {
        int v = q.poll();
        for (int i = 1; i < len; i++) {
            if (adj[v][i]) {
                result[i] = Math.max(result[i], result[v] + time[i]);
                if (--indegree[i] == 0) {
                    q.add(i);
                }
            }
        }
    }
    return result;
}
==========================================================
<topological sorting algorithm>


topologicalSort Reference link
http://jason9319.tistory.com/93
출처: http://mygumi.tistory.com/178

The principle of the problem is not to obtain the minimum time, but to obtain the maximum value from the vertices connected from the vertex.

You can use this method to find the answer you want.

*Source of the problem = https://www.acmicpc.net/problem/1005
*문제 출처 : BAEKJOON ONLINE JUDGE

댓글

이 블로그의 인기 게시물

1978 : 소수 찾기 [C++]

# include < iostream > # include < vector > using namespace std ; int main ( ) { cin . tie ( NULL ) ; vector < int > Primes ; Primes . push_back ( 2 ) ; Primes . push_back ( 3 ) ; for ( int i = 4 ; i < 1000 ; i + + ) { bool IsPrime = true ; if ( i % 2 = = 0 | | i % 3 = = 0 ) continue ; for ( int j = 4 ; j < i ; j + + ) { if ( i % j = = 0 ) { IsPrime = false ; break ; } } if ( IsPrime ) Primes . push_back ( i ) ; } int N , Count = 0 ; cin > > N ; for ( int i = 0 ; i < N ; i + + ) { int Input ; cin > > Input ; for ( int j = 0 ; j < Primes . size ( ) ; j + + ) if ( Input = = Primes [ j ] ) Count + + ; } cout < < Count < < " \n " ; return 0 ; }

10828 : 스택 [Python]

Stack = [ ] def push ( num ) : Stack . append ( int ( num ) ) def pop ( ) : if len ( Stack ) > 0 : print ( Stack . pop ( ) ) else : print ( - 1 ) def size ( ) : print ( len ( Stack ) ) def empty ( ) : if len ( Stack ) == 0 : print ( 1 ) else : print ( 0 ) def top ( ) : if len ( Stack ) > 0 : print ( Stack [ len ( Stack ) - 1 ] ) else : print ( - 1 ) TestCase = int ( input ( ) ) while TestCase > 0 : Command = input ( ) if Command == 'top' : top ( ) elif Command == 'pop' : pop ( ) elif Command == 'empty' : empty ( ) elif Command == 'size' : size ( ) else : push ( Command [ 5 : ] ) TestCase - = 1