yohei #5687(2008/02/05 13:17 GMT) [ Prolog ] Rating1/1=1.00
トポロジカルソートを使用しました.
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
:- use_module(library(ugraphs)). read_number(In, Num) :- read_line_to_codes(In, Codes), number_codes(Num, Codes). read_number2(In, X-Y) :- read_line_to_codes(In, C), append(C1, [0' |C2], C), number_codes(X, C1), number_codes(Y, C2). read_match(N, Match) :- current_input(In), read_number(In, N), read_number(In, M), length(Match, M), maplist(read_number2(In), Match). write_rank(Rank, Extra) :- maplist(writeln, Rank), writeln(Extra). single_solution([_], _). single_solution([X1,X2|Xs], Match) :- memberchk(X1-X2, Match), single_solution([X2|Xs], Match). rank(N, Match, Rank) :- numlist(1, N, L), vertices_edges_to_ugraph(L, Match, G), top_sort(G, Rank). :- setup_and_call_cleanup(see('input.txt'), read_match(N, Match), seen), rank(N, Match, Rank), (single_solution(Rank, Match) -> Extra = 0; Extra = 1), setup_and_call_cleanup(tell('output.txt'), write_rank(Rank, Extra), told).
Rating1/1=1.00-0+
[ reply ]
yohei
#5687()
[
Prolog
]
Rating1/1=1.00
トポロジカルソートを使用しました.
:- use_module(library(ugraphs)). read_number(In, Num) :- read_line_to_codes(In, Codes), number_codes(Num, Codes). read_number2(In, X-Y) :- read_line_to_codes(In, C), append(C1, [0' |C2], C), number_codes(X, C1), number_codes(Y, C2). read_match(N, Match) :- current_input(In), read_number(In, N), read_number(In, M), length(Match, M), maplist(read_number2(In), Match). write_rank(Rank, Extra) :- maplist(writeln, Rank), writeln(Extra). single_solution([_], _). single_solution([X1,X2|Xs], Match) :- memberchk(X1-X2, Match), single_solution([X2|Xs], Match). rank(N, Match, Rank) :- numlist(1, N, L), vertices_edges_to_ugraph(L, Match, G), top_sort(G, Rank). :- setup_and_call_cleanup(see('input.txt'), read_match(N, Match), seen), rank(N, Match, Rank), (single_solution(Rank, Match) -> Extra = 0; Extra = 1), setup_and_call_cleanup(tell('output.txt'), write_rank(Rank, Extra), told).Rating1/1=1.00-0+
[ reply ]