#1514
Medium Algorithms Path with maximum probability
Array Graph Theory Heap (Priority Queue) Shortest Path
65.5% acceptance
Mar 1, 2026
3878
110
You are given an undirected weighted graph of n nodes (0-indexed), represented by an edge list where edges[i] = [a, b] is an undirected edge connecting the nodes a and b with a probability of success of traversing that edge succProb[i].
Given two nodes start and end, find the path with the maximum probability of success to go from start to end and return its success probability.
If there is no path from start to end, return 0. Your answer will be accepted if it differs from the correct answer by at most 1e-5.
- 1. Multiplying probabilities will result in precision errors.
- 2. Take log probabilities to sum up numbers instead of multiplying them.
- 3. Use Dijkstra's algorithm to find the minimum path between the two nodes after negating all costs.
1
Example
Input
n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.2], start = 0, end = 2
Output
0.25000
Explanation
There are two paths from start to end, one having a probability of success = 0.2 and the other has 0.5 * 0.5 = 0.25.
2
Example
Input
n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.3], start = 0, end = 2
Output
0.30000
3
Example
Input
n = 3, edges = [[0,1]], succProb = [0.5], start = 0, end = 2
Output
0.00000
Explanation
There is no path between 0 and 2.
6 Test Cases
35062.3 µs total
6 passed
Function
t4
Runtime
5277.20 µs
#[test]
fn t4() {
let start = std::time::Instant::now();
let val = Solution::max_probability(2, vec![vec![0, 1]], vec![1.0], 0, 1);
let expected = 1.0;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t4", start, &expected, &val);
assert!(pass);
}
Function
t3
Runtime
5588.80 µs
#[test]
fn t3() {
let start = std::time::Instant::now();
let val = Solution::max_probability(3, vec![vec![0, 1]], vec![0.5], 0, 2);
let expected = 0.0;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t3", start, &expected, &val);
assert!(pass);
}
Function
t1
Runtime
6132.30 µs
#[test]
fn t1() {
let start = std::time::Instant::now();
let val = Solution::max_probability(3, vec![vec![0, 1], vec![1, 2], vec![0, 2]], vec![0.5, 0.5, 0.2], 0, 2);
let expected = 0.25;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t1", start, &expected, &val);
assert!(pass);
}
Function
t5
Runtime
5071.40 µs
#[test]
fn t5() {
let start = std::time::Instant::now();
let val = Solution::max_probability(3, vec![vec![0, 1], vec![1, 2]], vec![0.5, 0.5], 0, 2);
let expected = 0.25;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t5", start, &expected, &val);
assert!(pass);
}
Function
t2
Runtime
5981.60 µs
#[test]
fn t2() {
let start = std::time::Instant::now();
let val = Solution::max_probability(3, vec![vec![0, 1], vec![1, 2], vec![0, 2]], vec![0.5, 0.5, 0.3], 0, 2);
let expected = 0.3;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t2", start, &expected, &val);
assert!(pass);
}
Function
t6
Runtime
7011.00 µs
#[test]
fn t6() {
let start = std::time::Instant::now();
let val = Solution::max_probability(1000, vec![vec![448, 931], vec![234, 889], vec![214, 962], vec![576, 746], vec![678, 734], vec![214, 928], vec![602, 779], vec![190, 968], vec![227, 858], vec![714, 842], vec![177, 345], vec![705, 994], vec![365, 998], vec![307, 336], vec![123, 914], vec![398, 487], vec![112, 234], vec![44, 357], vec![318, 506], vec![311, 926], vec![559, 735], vec![28, 299], vec![689, 723], vec![29, 566], vec![355, 476], vec![507, 813], vec![799, 841], vec![166, 581], vec![499, 522], vec![155, 508], vec![80, 954], vec![412, 564], vec![502, 618], vec![59, 746], vec![272, 400], vec![75, 312], vec![510, 887], vec![303, 524], vec![646, 845], vec![786, 928], vec![124, 151], vec![109, 858], vec![96, 762], vec![291, 798], vec![69, 303], vec![27, 112], vec![292, 774], vec![257, 384], vec![59, 755], vec![140, 245], vec![431, 769], vec![60, 338], vec![173, 403], vec![95, 666], vec![165, 384], vec![298, 894], vec![963, 980], vec![325, 945], vec![419, 440], vec![338, 424], vec![344, 846], vec![396, 449], vec![76, 242], vec![620, 981], vec![264, 433], vec![580, 686], vec![196, 682], vec![272, 926], vec![223, 593], vec![644, 785], vec![487, 924], vec![289, 511], vec![714, 988], vec![625, 987], vec![50, 362], vec![88, 664], vec![233, 352], vec![32, 754], vec![206, 961], vec![641, 810], vec![301, 570], vec![77, 523], vec![26, 109], vec![482, 580], vec![528, 683], vec![128, 228], vec![436, 452], vec![253, 844], vec![126, 877], vec![462, 994], vec![204, 337], vec![380, 625], vec![179, 807], vec![635, 726], vec![143, 748], vec![594, 798], vec![972, 996], vec![328, 780], vec![267, 831], vec![176, 399], vec![257, 600], vec![495, 735], vec![844, 893], vec![102, 803], vec![62, 942], vec![354, 903], vec![234, 301], vec![306, 854], vec![63, 555], vec![39, 179], vec![125, 749], vec![414, 487], vec![80, 291], vec![416, 835], vec![77, 951], vec![10, 384], vec![637, 798], vec![248, 966], vec![646, 879], vec![210, 839], vec![675, 876], vec![580, 990], vec![187, 245], vec![18, 876], vec![881, 933], vec![422, 747], vec![422, 432], vec![635, 742], vec![813, 976], vec![719, 900], vec![149, 672], vec![518, 999], vec![342, 746], vec![121, 262], vec![457, 876], vec![534, 984], vec![219, 524], vec![192, 228], vec![636, 671], vec![196, 835], vec![323, 658], vec![360, 747], vec![643, 969], vec![95, 414], vec![199, 325], vec![169, 471], vec![50, 235], vec![307, 517], vec![500, 927], vec![226, 886], vec![131, 962], vec![65, 313], vec![470, 514], vec![851, 987], vec![437, 665], vec![284, 620], vec![468, 752], vec![54, 781], vec![266, 885], vec![362, 825], vec![0, 90], vec![14, 619], vec![259, 686], vec![171, 180], vec![249, 520], vec![240, 245], vec![225, 264], vec![128, 372], vec![198, 383], vec![306, 422], vec![46, 376], vec![107, 797], vec![746, 961], vec![401, 474], vec![346, 435], vec![241, 355], vec![109, 919], vec![497, 541], vec![271, 871], vec![329, 953], vec![376, 541], vec![564, 626], vec![91, 514], vec![8, 610], vec![595, 865], vec![888, 971], vec![852, 905], vec![532, 974], vec![211, 653], vec![288, 410], vec![463, 501], vec![258, 987], vec![99, 515], vec![494, 780], vec![562, 891], vec![392, 620], vec![293, 409], vec![161, 250], vec![460, 527], vec![801, 939], vec![275, 929], vec![76, 553], vec![236, 555], vec![192, 257], vec![497, 604], vec![140, 931], vec![224, 845], vec![159, 339], vec![328, 902], vec![63, 658], vec![231, 626], vec![862, 947], vec![305, 469], vec![109, 426], vec![216, 499], vec![156, 162], vec![297, 685], vec![101, 719], vec![524, 978], vec![794, 914], vec![933, 950], vec![859, 982], vec![626, 929], vec![162, 685], vec![252, 904], vec![95, 837], vec![293, 705], vec![117, 120], vec![334, 880], vec![19, 937], vec![304, 989], vec![391, 800], vec![54, 80], vec![266, 970], vec![99, 916], vec![34, 819], vec![163, 348], vec![507, 725], vec![295, 826], vec![99, 308], vec![378, 463], vec![799, 833], vec![389, 975], vec![699, 709], vec![836, 967], vec![38, 990], vec![586, 871], vec![664, 958], vec![840, 990], vec![333, 379], vec![71, 282], vec![487, 778], vec![766, 845], vec![225, 732], vec![446, 703], vec![672, 762], vec![342, 512], vec![693, 862], vec![80, 316], vec![325, 836], vec![118, 738], vec![278, 297], vec![107, 205], vec![442, 743], vec![715, 812], vec![40, 660], vec![138, 272], vec![234, 941], vec![804, 812], vec![459, 631], vec![45, 798], vec![246, 556], vec![396, 797], vec![817, 894], vec![548, 603], vec![233, 613], vec![386, 742], vec![215, 974], vec![102, 628], vec![44, 555], vec![210, 281], vec![191, 270], vec![119, 979], vec![613, 995], vec![794, 987], vec![151, 814], vec![621, 719], vec![322, 986], vec![144, 200], vec![625, 653], vec![574, 632], vec![123, 735], vec![528, 612], vec![344, 351], vec![203, 298], vec![357, 763], vec![303, 357], vec![55, 555], vec![209, 916], vec![97, 979], vec![602, 994], vec![74, 104], vec![94, 665], vec![561, 884], vec![202, 843], vec![849, 876], vec![630, 683], vec![37, 315], vec![335, 705], vec![63, 569], vec![76, 594], vec![377, 984], vec![246, 735], vec![49, 328], vec![29, 380], vec![394, 397], vec![66, 158], vec![270, 648], vec![581, 944], vec![304, 480], vec![161, 459], vec![626, 782], vec![169, 403], vec![19, 904], vec![289, 387], vec![200, 402], vec![276, 608], vec![45, 662], vec![339, 569], vec![103, 673], vec![328, 602], vec![328, 905], vec![438, 910], vec![675, 679], vec![125, 313], vec![383, 656], vec![179, 266], vec![807, 968], vec![176, 946], vec![250, 466], vec![106, 295], vec![409, 627], vec![399, 708], vec![350, 812], vec![54, 363], vec![482, 774], vec![217, 411], vec![58, 73], vec![865, 912], vec![387, 554], vec![21, 876], vec![263, 374], vec![784, 969], vec![391, 997], vec![170, 181], vec![56, 163], vec![510, 575], vec![159, 925], vec![14, 532], vec![605, 699], vec![834, 845], vec![119, 835], vec![522, 931], vec![341, 749], vec![361, 469], vec![187, 437], vec![78, 613], vec![814, 950], vec![443, 996], vec![542, 876], vec![378, 694], vec![170, 183], vec![560, 803], vec![320, 486], vec![50, 530], vec![817, 941], vec![209, 521], vec![258, 322], vec![235, 540], vec![595, 950], vec![191, 497], vec![16, 953], vec![299, 436], vec![236, 568], vec![160, 298], vec![812, 874], vec![173, 916], vec![731, 770], vec![341, 768], vec![76, 956], vec![788, 858], vec![67, 639], vec![331, 674], vec![693, 792], vec![62, 188], vec![555, 626], vec![313, 473], vec![172, 470], vec![245, 250], vec![10, 116], vec![754, 976], vec![665, 694], vec![530, 947], vec![506, 785], vec![752, 854], vec![437, 788], vec![61, 731], vec![361, 926], vec![318, 909], vec![405, 470], vec![331, 919], vec![577, 589], vec![931, 976], vec![288, 746], vec![151, 340], vec![279, 654], vec![397, 523], vec![113, 496], vec![318, 807], vec![84, 955], vec![290, 637], vec![517, 966], vec![687, 858], vec![342, 741], vec![238, 554], vec![809, 924], vec![76, 162], vec![941, 975], vec![109, 452], vec![21, 663], vec![207, 583], vec![670, 838], vec![150, 558], vec![801, 874], vec![318, 483], vec![286, 377], vec![173, 216], vec![111, 431], vec![463, 489], vec![630, 884], vec![623, 782], vec![193, 305], vec![8, 690], vec![476, 937], vec![35, 938], vec![159, 317], vec![96, 977], vec![198, 488], vec![460, 461], vec![537, 607], vec![426, 451], vec![42, 90], vec![488, 794], vec![56, 819], vec![43, 66], vec![96, 200], vec![383, 743], vec![293, 299], vec![119, 218], vec![531, 720], vec![432, 582], vec![338, 888], vec![560, 700], vec![619, 747], vec![400, 488], vec![569, 968], vec![519, 569], vec![284, 628], vec![32, 438], vec![369, 706], vec![282, 283], vec![645, 959], vec![129, 381], vec![667, 725], vec![313, 549], vec![9, 66], vec![495, 619], vec![393, 729], vec![425, 888], vec![26, 390], vec![145, 568], vec![126, 288], vec![318, 418], vec![115, 695], vec![215, 449], vec![521, 645], vec![228, 962], vec![180, 838], vec![53, 318], vec![41, 820], vec![772, 801], vec![292, 729], vec![138, 835], vec![538, 557], vec![588, 698], vec![85, 169], vec![503, 883], vec![499, 603], vec![542, 954], vec![439, 727], vec![514, 923], vec![291, 843], vec![269, 875], vec![645, 672], vec![535, 825], vec![19, 279], vec![121, 962], vec![60, 240], vec![181, 902], vec![110, 907], vec![649, 995], vec![30, 687], vec![481, 678], vec![147, 300], vec![663, 810], vec![392, 742], vec![345, 568], vec![600, 848], vec![732, 815], vec![320, 717], vec![577, 994], vec![454, 790], vec![427, 491], vec![43, 983], vec![83, 172], vec![308, 398], vec![391, 817], vec![575, 629], vec![393, 931], vec![601, 797], vec![485, 685], vec![41, 95], vec![139, 463], vec![507, 549], vec![843, 980], vec![342, 652], vec![111, 972], vec![167, 309], vec![71, 834], vec![386, 418], vec![57, 991], vec![133, 715], vec![692, 835], vec![376, 513], vec![164, 308], vec![851, 877], vec![581, 774], vec![755, 849], vec![608, 900], vec![360, 409], vec![21, 507], vec![128, 680], vec![252, 965], vec![83, 936], vec![572, 871], vec![309, 378], vec![80, 232], vec![714, 855], vec![489, 559], vec![146, 996], vec![533, 549], vec![189, 401], vec![288, 312], vec![196, 202], vec![268, 408], vec![213, 522], vec![486, 817], vec![231, 402], vec![14, 804], vec![825, 897], vec![408, 594], vec![524, 618], vec![10, 487], vec![262, 860], vec![301, 862], vec![246, 634], vec![582, 969], vec![284, 976], vec![271, 286], vec![397, 606], vec![239, 422], vec![432, 443], vec![359, 907], vec![355, 826], vec![268, 468], vec![173, 451], vec![356, 854], vec![546, 992], vec![170, 411], vec![486, 758], vec![84, 771], vec![868, 898], vec![149, 735], vec![767, 833], vec![12, 102], vec![302, 509], vec![414, 711], vec![970, 991], vec![83, 771], vec![97, 715], vec![389, 595], vec![215, 374], vec![182, 381], vec![313, 453], vec![531, 835], vec![461, 666], vec![496, 596], vec![58, 241], vec![334, 996], vec![526, 987], vec![263, 567], vec![200, 883], vec![73, 419], vec![58, 293], vec![553, 785], vec![502, 593], vec![462, 475], vec![606, 662], vec![84, 107], vec![698, 720], vec![99, 672], vec![528, 817], vec![260, 582], vec![563, 773], vec![187, 305], vec![253, 752], vec![152, 981], vec![379, 410], vec![30, 515], vec![248, 439], vec![217, 406], vec![113, 127], vec![332, 498], vec![142, 878], vec![136, 396], vec![228, 388], vec![11, 884], vec![42, 255], vec![4, 175], vec![660, 860], vec![521, 863], vec![69, 328], vec![796, 817], vec![92, 464], vec![142, 217], vec![214, 691], vec![981, 989], vec![354, 895], vec![268, 669], vec![80, 524], vec![703, 723], vec![129, 292], vec![141, 216], vec![634, 807], vec![350, 625], vec![53, 151], vec![106, 708], vec![2, 872], vec![93, 723], vec![35, 984], vec![778, 829], vec![521, 583], vec![95, 607], vec![342, 933], vec![425, 983], vec![71, 89], vec![3, 94], vec![448, 676], vec![362, 822], vec![233, 740], vec![145, 786], vec![2, 784], vec![47, 974], vec![287, 981], vec![565, 711], vec![34, 138], vec![312, 605], vec![566, 879], vec![335, 740], vec![255, 878], vec![657, 987], vec![207, 781], vec![235, 865], vec![435, 808], vec![292, 588], vec![126, 196], vec![834, 988], vec![530, 961], vec![536, 709], vec![461, 824], vec![394, 577], vec![192, 832], vec![525, 752], vec![297, 725], vec![33, 35], vec![257, 838], vec![65, 276], vec![402, 876], vec![478, 747], vec![692, 801], vec![61, 809], vec![466, 550], vec![261, 412], vec![178, 608], vec![134, 266], vec![611, 765], vec![45, 740], vec![6, 719], vec![154, 406], vec![268, 662], vec![46, 233], vec![761, 977], vec![74, 370], vec![151, 581], vec![21, 753], vec![268, 995], vec![25, 573], vec![772, 937], vec![27, 181], vec![275, 556], vec![11, 45], vec![375, 915], vec![649, 991], vec![515, 616], vec![123, 987], vec![522, 544], vec![320, 488], vec![210, 370], vec![101, 702], vec![216, 659], vec![396, 812], vec![657, 911], vec![672, 674], vec![14, 540], vec![140, 580], vec![403, 835], vec![230, 608], vec![120, 315], vec![275, 304], vec![806, 973], vec![49, 796], vec![398, 729], vec![527, 772], vec![113, 674], vec![154, 452], vec![233, 971], vec![362, 480], vec![467, 509], vec![249, 797], vec![33, 666], vec![9, 991], vec![219, 576], vec![136, 857], vec![911, 945], vec![521, 791], vec![98, 949], vec![337, 507], vec![446, 522], vec![589, 891], vec![578, 609], vec![835, 987], vec![99, 464], vec![192, 845], vec![10, 731], vec![479, 506], vec![286, 456], vec![137, 677], vec![211, 239], vec![116, 161], vec![699, 752], vec![20, 251], vec![692, 893], vec![580, 957], vec![636, 837], vec![180, 972], vec![424, 546], vec![317, 331], vec![175, 915], vec![19, 187], vec![360, 862], vec![43, 944], vec![322, 849], vec![614, 665], vec![85, 985], vec![156, 337], vec![401, 751], vec![202, 327], vec![250, 836], vec![557, 788], vec![470, 988], vec![4, 282], vec![683, 932], vec![491, 534], vec![765, 888], vec![19, 235], vec![127, 843], vec![339, 677], vec![108, 190], vec![122, 199], vec![213, 886], vec![383, 742], vec![526, 932], vec![163, 678], vec![167, 271], vec![643, 914], vec![271, 644], vec![187, 572], vec![122, 679], vec![398, 985], vec![290, 905], vec![487, 741], vec![81, 493], vec![639, 713], vec![311, 790], vec![3, 47], vec![150, 844], vec![585, 979], vec![283, 316], vec![232, 271], vec![59, 616], vec![233, 858], vec![143, 398], vec![308, 966], vec![452, 879], vec![467, 845], vec![87, 674], vec![464, 604], vec![101, 141], vec![144, 972], vec![372, 650], vec![796, 982], vec![39, 568], vec![95, 294], vec![327, 633], vec![890, 962], vec![282, 407], vec![281, 326], vec![352, 788], vec![570, 902], vec![757, 921], vec![531, 784], vec![236, 284], vec![445, 865], vec![360, 724], vec![317, 761], vec![66, 328], vec![194, 340], vec![409, 562], vec![362, 688], vec![569, 876], vec![195, 953], vec![855, 918], vec![416, 864], vec![213, 273], vec![269, 947], vec![63, 529], vec![833, 916], vec![28, 914], vec![830, 940], vec![203, 303], vec![159, 974], vec![551, 819], vec![300, 618], vec![290, 553], vec![518, 921], vec![158, 455], vec![835, 947], vec![252, 508], vec![117, 260], vec![305, 376], vec![335, 465], vec![96, 445], vec![210, 513], vec![556, 644], vec![300, 547], vec![72, 928], vec![253, 558], vec![343, 585], vec![93, 515], vec![535, 810], vec![385, 741], vec![392, 965], vec![99, 141], vec![188, 535], vec![19, 921], vec![241, 596], vec![141, 300], vec![321, 732], vec![697, 727], vec![170, 925], vec![151, 745], vec![616, 856], vec![383, 465], vec![311, 697], vec![306, 695], vec![160, 856], vec![22, 596], vec![258, 718], vec![194, 906], vec![632, 749], vec![427, 987], vec![307, 356], vec![23, 888], vec![375, 968], vec![186, 313], vec![135, 431], vec![27, 439], vec![331, 931], vec![444, 991], vec![477, 675], vec![728, 740], vec![596, 868], vec![307, 857], vec![223, 463], vec![214, 470], vec![244, 263], vec![610, 711], vec![198, 773], vec![241, 984], vec![335, 940], vec![12, 677], vec![358, 538], vec![675, 761], vec![560, 825], vec![355, 929], vec![821, 983], vec![83, 571], vec![513, 702], vec![341, 476], vec![475, 868], vec![334, 352], vec![811, 956], vec![233, 295], vec![43, 557], vec![487, 817], vec![519, 829], vec![470, 728], vec![574, 754], vec![54, 857], vec![144, 828], vec![140, 254], vec![556, 859], vec![165, 868], vec![317, 909], vec![43, 263], vec![323, 380], vec![119, 239], vec![356, 554], vec![44, 511], vec![626, 915], vec![205, 389], vec![166, 816], vec![521, 899], vec![98, 773], vec![338, 343], vec![79, 355], vec![260, 798], vec![209, 850], vec![166, 176], vec![804, 820], vec![296, 805], vec![85, 338], vec![406, 608], vec![97, 954], vec![201, 775], vec![681, 890], vec![33, 601], vec![251, 834], vec![776, 956], vec![138, 551], vec![195, 924], vec![112, 137], vec![862, 987], vec![461, 806], vec![19, 228], vec![354, 647], vec![257, 984], vec![499, 971], vec![33, 237], vec![30, 541], vec![151, 727], vec![337, 529], vec![25, 386], vec![47, 300], vec![548, 582], vec![302, 312], vec![7, 868], vec![66, 117], vec![154, 622], vec![462, 594], vec![622, 752], vec![641, 710], vec![527, 760], vec![152, 536], vec![406, 879], vec![200, 331], vec![98, 866], vec![245, 503], vec![285, 894], vec![73, 583], vec![2, 323], vec![62, 419], vec![137, 407], vec![199, 461], vec![771, 865], vec![515, 721], vec![168, 243], vec![629, 655], vec![298, 432], vec![442, 562], vec![688, 784], vec![492, 747], vec![638, 831], vec![86, 284], vec![177, 514], vec![633, 894], vec![180, 343], vec![253, 830], vec![208, 604], vec![884, 967], vec![531, 592], vec![131, 644], vec![6, 185], vec![174, 319], vec![169, 266], vec![11, 272], vec![236, 897], vec![232, 484], vec![442, 796], vec![108, 642], vec![173, 514], vec![133, 418], vec![305, 807], vec![8, 858], vec![420, 811], vec![219, 246], vec![305, 648], vec![443, 791], vec![356, 828], vec![76, 353], vec![19, 156], vec![263, 631], vec![126, 377], vec![208, 726], vec![449, 814], vec![236, 792], vec![7, 207], vec![144, 156], vec![143, 532], vec![181, 775], vec![61, 125], vec![266, 568], vec![469, 569], vec![293, 797], vec![299, 665], vec![357, 437], vec![732, 916], vec![231, 736], vec![635, 915], vec![378, 632], vec![83, 790], vec![450, 731], vec![722, 894], vec![678, 795], vec![386, 710], vec![325, 411], vec![131, 491], vec![840, 886], vec![730, 761], vec![401, 938], vec![71, 660], vec![278, 426], vec![668, 770], vec![522, 556], vec![585, 864], vec![429, 597], vec![18, 933], vec![335, 618], vec![220, 934], vec![676, 944], vec![217, 548], vec![413, 764], vec![271, 479], vec![657, 804], vec![56, 510], vec![354, 366], vec![738, 904], vec![117, 796], vec![555, 674], vec![214, 684], vec![285, 996], vec![105, 309], vec![395, 558], vec![153, 388], vec![656, 756], vec![143, 688], vec![341, 587], vec![810, 827], vec![310, 648], vec![3, 992], vec![334, 943], vec![367, 768], vec![376, 711], vec![385, 864], vec![93, 472], vec![473, 706], vec![597, 924], vec![694, 845], vec![47, 522], vec![155, 184], vec![270, 718], vec![213, 525], vec![896, 948], vec![276, 673], vec![115, 874], vec![485, 887], vec![760, 825], vec![66, 95], vec![691, 874], vec![62, 787], vec![440, 594], vec![79, 356], vec![640, 672], vec![527, 840], vec![44, 596], vec![431, 762], vec![16, 455], vec![682, 975], vec![353, 567], vec![731, 748], vec![242, 820], vec![55, 387], vec![476, 562], vec![516, 906], vec![247, 834], vec![652, 989], vec![656, 742], vec![35, 962], vec![310, 610], vec![431, 992], vec![660, 679], vec![440, 915], vec![190, 505], vec![87, 566], vec![418, 483], vec![581, 881], vec![328, 681], vec![83, 366], vec![30, 900], vec![64, 432], vec![134, 710], vec![200, 452], vec![256, 440], vec![575, 893], vec![530, 756], vec![71, 666], vec![739, 900], vec![289, 566], vec![489, 575], vec![196, 985], vec![191, 646], vec![427, 697], vec![231, 500], vec![185, 953], vec![29, 134], vec![80, 236], vec![28, 582], vec![330, 724], vec![690, 886], vec![198, 898], vec![473, 681], vec![439, 790], vec![95, 573], vec![100, 942], vec![460, 615], vec![182, 283], vec![264, 380], vec![424, 606], vec![115, 534], vec![352, 792], vec![34, 655], vec![644, 902], vec![35, 724], vec![400, 934], vec![377, 390], vec![123, 257], vec![257, 735], vec![447, 453], vec![194, 593], vec![190, 256], vec![362, 889], vec![192, 993], vec![210, 508], vec![8, 437], vec![229, 428], vec![2, 124], vec![73, 448], vec![618, 763], vec![469, 717], vec![487, 830], vec![90, 700], vec![111, 878], vec![562, 989], vec![233, 252], vec![340, 687], vec![143, 536], vec![82, 202], vec![145, 749], vec![808, 962], vec![43, 405], vec![340, 726], vec![526, 742], vec![194, 889], vec![553, 656], vec![173, 541], vec![158, 905], vec![264, 781], vec![223, 418], vec![130, 598], vec![93, 442], vec![420, 631], vec![178, 556], vec![40, 158], vec![415, 700], vec![174, 520], vec![454, 981], vec![795, 980], vec![687, 759], vec![651, 715], vec![325, 598], vec![292, 715], vec![175, 987], vec![85, 165], vec![437, 807], vec![719, 949], vec![184, 977], vec![403, 725], vec![309, 771], vec![284, 797], vec![6, 512], vec![41, 929], vec![524, 660], vec![165, 229], vec![741, 756], vec![3, 536], vec![663, 752], vec![291, 567], vec![482, 591], vec![367, 428], vec![720, 721], vec![448, 604], vec![459, 525], vec![185, 254], vec![380, 918], vec![752, 841], vec![64, 544], vec![595, 869], vec![469, 559], vec![122, 672], vec![271, 776], vec![489, 770], vec![26, 786], vec![270, 807], vec![740, 986], vec![31, 825], vec![247, 754], vec![295, 703], vec![13, 467], vec![18, 538], vec![342, 609], vec![176, 238], vec![298, 887], vec![97, 474], vec![29, 568], vec![313, 589], vec![196, 271], vec![601, 855], vec![379, 648], vec![215, 834], vec![258, 885], vec![227, 635], vec![899, 944], vec![290, 949], vec![551, 585], vec![267, 688], vec![536, 762], vec![208, 822], vec![260, 357], vec![167, 800], vec![650, 866], vec![275, 490], vec![94, 563], vec![773, 908], vec![247, 612], vec![105, 894], vec![311, 715], vec![363, 724], vec![197, 553], vec![4, 580], vec![757, 883], vec![258, 885], vec![42, 732], vec![635, 667], vec![72, 618], vec![123, 574], vec![629, 988], vec![327, 662], vec![67, 567], vec![802, 898], vec![126, 413], vec![7, 881], vec![144, 540], vec![378, 644], vec![65, 445], vec![314, 843], vec![0, 277], vec![317, 849], vec![41, 406], vec![738, 915], vec![48, 581], vec![84, 227], vec![161, 803], vec![641, 844], vec![738, 767], vec![335, 652], vec![48, 486], vec![76, 857], vec![363, 790], vec![223, 589], vec![211, 681], vec![22, 397], vec![683, 916], vec![378, 645], vec![207, 455], vec![513, 592], vec![475, 849], vec![13, 441], vec![336, 880], vec![803, 926], vec![32, 564], vec![820, 960], vec![288, 931], vec![735, 933], vec![295, 572], vec![235, 434], vec![27, 300], vec![60, 640], vec![347, 839], vec![674, 879], vec![160, 305], vec![418, 628], vec![59, 414], vec![46, 374], vec![489, 930], vec![740, 827], vec![89, 766], vec![10, 44], vec![431, 603], vec![317, 484], vec![307, 945], vec![65, 71], vec![295, 873], vec![951, 989], vec![477, 537], vec![321, 526], vec![144, 830], vec![263, 283], vec![319, 728], vec![631, 745], vec![339, 643], vec![255, 809], vec![402, 510], vec![133, 565], vec![251, 257], vec![153, 829], vec![32, 574], vec![8, 285], vec![340, 350], vec![334, 898], vec![467, 959], vec![95, 643], vec![266, 788], vec![163, 498], vec![270, 621], vec![503, 744], vec![639, 672], vec![51, 66], vec![553, 980], vec![12, 353], vec![60, 626], vec![367, 654], vec![673, 895], vec![605, 882], vec![469, 739], vec![60, 832], vec![170, 913], vec![101, 195], vec![117, 304], vec![149, 292], vec![92, 773], vec![32, 737], vec![13, 885], vec![502, 940], vec![147, 653], vec![92, 268], vec![375, 628], vec![474, 638], vec![310, 746], vec![258, 388], vec![253, 705], vec![352, 371], vec![11, 563], vec![68, 369], vec![287, 599], vec![310, 984], vec![250, 893], vec![558, 614], vec![530, 608], vec![507, 709], vec![375, 392], vec![360, 609], vec![53, 304], vec![804, 991], vec![608, 612], vec![205, 826], vec![299, 582], vec![407, 979], vec![539, 893], vec![756, 789], vec![228, 556], vec![212, 933], vec![122, 309], vec![223, 934], vec![461, 919], vec![187, 836], vec![728, 782], vec![556, 962], vec![809, 884], vec![185, 907], vec![770, 858], vec![411, 876], vec![451, 794], vec![285, 387], vec![326, 541], vec![614, 985], vec![105, 440], vec![611, 986], vec![283, 701], vec![507, 855], vec![168, 731], vec![412, 518], vec![132, 970], vec![825, 853], vec![293, 357], vec![528, 682], vec![534, 610], vec![37, 278], vec![536, 662], vec![55, 128], vec![158, 184], vec![52, 488], vec![576, 648], vec![50, 343], vec![242, 288], vec![387, 938], vec![282, 905], vec![25, 31], vec![568, 955], vec![139, 260], vec![709, 976], vec![459, 854], vec![47, 970], vec![345, 944], vec![493, 838], vec![316, 455], vec![280, 753], vec![418, 692], vec![468, 691], vec![834, 942], vec![381, 644], vec![51, 366], vec![423, 744], vec![232, 914], vec![24, 510], vec![282, 318], vec![854, 895], vec![284, 570], vec![650, 957], vec![3, 390], vec![290, 723], vec![508, 876], vec![234, 843], vec![291, 801], vec![23, 395], vec![179, 766], vec![142, 837], vec![528, 572], vec![635, 984], vec![446, 783], vec![332, 854], vec![675, 875], vec![497, 933], vec![86, 756], vec![679, 965], vec![78, 140], vec![360, 869], vec![847, 925], vec![197, 223], vec![215, 737], vec![557, 709], vec![403, 595], vec![22, 339], vec![289, 341], vec![125, 848], vec![225, 676], vec![350, 608], vec![355, 874], vec![584, 868], vec![108, 325], vec![615, 634], vec![565, 807], vec![804, 981], vec![167, 558], vec![98, 784], vec![111, 489], vec![43, 174], vec![46, 939], vec![180, 690], vec![293, 916], vec![3, 291], vec![14, 545], vec![74, 880], vec![397, 639], vec![700, 962], vec![310, 598], vec![333, 385], vec![406, 907], vec![72, 348], vec![95, 699], vec![224, 397], vec![639, 681], vec![205, 331], vec![556, 887], vec![78, 173], vec![61, 467], vec![284, 464], vec![463, 771], vec![114, 592], vec![49, 412], vec![292, 888], vec![790, 885], vec![694, 914], vec![464, 737], vec![535, 551], vec![284, 313], vec![92, 994], vec![495, 612], vec![42, 378], vec![764, 934], vec![716, 936], vec![578, 679], vec![268, 520], vec![558, 725], vec![66, 953], vec![69, 340], vec![7, 61], vec![234, 731], vec![128, 637], vec![603, 959], vec![225, 886], vec![131, 299], vec![74, 848], vec![130, 968], vec![216, 360], vec![291, 731], vec![150, 770], vec![454, 905], vec![208, 733], vec![251, 381], vec![218, 245], vec![203, 778], vec![80, 226], vec![238, 419], vec![388, 918], vec![307, 983], vec![76, 524], vec![738, 793], vec![825, 975], vec![251, 737], vec![23, 240], vec![420, 782], vec![791, 878], vec![67, 517], vec![537, 689], vec![473, 973], vec![597, 963], vec![615, 732], vec![206, 670], vec![95, 718], vec![495, 711], vec![725, 738], vec![23, 240], vec![735, 879], vec![70, 950], vec![100, 759], vec![445, 617], vec![139, 279], vec![219, 857], vec![578, 820], vec![419, 789], vec![209, 401], vec![465, 492], vec![457, 996], vec![391, 490], vec![541, 926], vec![623, 648], vec![130, 422], vec![447, 945], vec![648, 780], vec![569, 652], vec![157, 752], vec![199, 570], vec![79, 792], vec![952, 994], vec![165, 271], vec![353, 802], vec![616, 884], vec![261, 902], vec![548, 971], vec![190, 696], vec![207, 890], vec![299, 677], vec![545, 833], vec![37, 97], vec![668, 893], vec![249, 842], vec![7, 280], vec![658, 915], vec![728, 782], vec![773, 840], vec![512, 847], vec![82, 142], vec![912, 937], vec![129, 251], vec![623, 968], vec![97, 135], vec![540, 658], vec![198, 592], vec![443, 667], vec![371, 664], vec![130, 381], vec![35, 188], vec![100, 404], vec![157, 436], vec![350, 830], vec![238, 678], vec![265, 786], vec![539, 602], vec![114, 838], vec![479, 962], vec![26, 659], vec![114, 305], vec![108, 418], vec![50, 665], vec![178, 601], vec![176, 861], vec![191, 496], vec![146, 689], vec![31, 685], vec![752, 915], vec![418, 654], vec![230, 588], vec![568, 791], vec![511, 643], vec![369, 973], vec![5, 207], vec![503, 712], vec![544, 976], vec![379, 595], vec![162, 664], vec![410, 558], vec![330, 986], vec![214, 694], vec![203, 315], vec![485, 995], vec![595, 773], vec![213, 795], vec![50, 503], vec![385, 473], vec![408, 428], vec![653, 834], vec![2, 267], vec![675, 910], vec![129, 697], vec![195, 750], vec![772, 967], vec![643, 964], vec![564, 658], vec![448, 586], vec![926, 962], vec![701, 820], vec![45, 409], vec![781, 923], vec![11, 933], vec![475, 565], vec![143, 755], vec![197, 524], vec![0, 720], vec![642, 936], vec![178, 988], vec![100, 395], vec![458, 466], vec![590, 611], vec![99, 232], vec![504, 688], vec![973, 994], vec![11, 849], vec![662, 741], vec![121, 533], vec![934, 972], vec![642, 696], vec![229, 616], vec![91, 512], vec![314, 352], vec![78, 697], vec![626, 980], vec![131, 219], vec![356, 407], vec![207, 511], vec![219, 788], vec![522, 965], vec![540, 591], vec![422, 701], vec![69, 857], vec![552, 608], vec![493, 808], vec![803, 947], vec![73, 836], vec![51, 568], vec![51, 112], vec![561, 741], vec![360, 598], vec![334, 795], vec![419, 524], vec![201, 682], vec![746, 832], vec![122, 800], vec![629, 636], vec![258, 835], vec![216, 248], vec![419, 913], vec![315, 729], vec![82, 594], vec![159, 953], vec![16, 595], vec![670, 717], vec![643, 744], vec![547, 749], vec![724, 855], vec![836, 911], vec![334, 890], vec![513, 993], vec![337, 940], vec![249, 655], vec![241, 322], vec![457, 810], vec![335, 805], vec![549, 789], vec![649, 984], vec![705, 783], vec![493, 501], vec![409, 485], vec![329, 862], vec![25, 412], vec![167, 407], vec![543, 694], vec![401, 506], vec![278, 613], vec![337, 608], vec![490, 745], vec![220, 517], vec![505, 883], vec![661, 925], vec![194, 819], vec![760, 919], vec![247, 495], vec![742, 972], vec![760, 916], vec![433, 692], vec![265, 942], vec![324, 597], vec![387, 412], vec![95, 126], vec![55, 880], vec![759, 972], vec![887, 892], vec![482, 749], vec![778, 916], vec![699, 756], vec![465, 731], vec![263, 640], vec![77, 362], vec![798, 824], vec![175, 774], vec![124, 400], vec![501, 797], vec![473, 647], vec![101, 621], vec![561, 938], vec![77, 437], vec![234, 536], vec![244, 843], vec![347, 837], vec![199, 299], vec![478, 665], vec![849, 945], vec![45, 413], vec![782, 820], vec![686, 773], vec![83, 116], vec![517, 519], vec![329, 852], vec![253, 810], vec![406, 711], vec![608, 725], vec![599, 963], vec![172, 887], vec![465, 998], vec![132, 626], vec![142, 767], vec![189, 365], vec![91, 452], vec![242, 944], vec![474, 747], vec![183, 522], vec![344, 652], vec![98, 948], vec![183, 684], vec![112, 746], vec![401, 922], vec![79, 274], vec![445, 842], vec![857, 860], vec![90, 854], vec![164, 278], vec![669, 706], vec![160, 407], vec![711, 937], vec![217, 704], vec![428, 677], vec![30, 407], vec![384, 952], vec![371, 492], vec![410, 519], vec![363, 592], vec![159, 518], vec![557, 687], vec![307, 677], vec![513, 767], vec![811, 904], vec![272, 749], vec![758, 863], vec![799, 906], vec![169, 752], vec![547, 797], vec![522, 572], vec![342, 646], vec![8, 595], vec![428, 442], vec![254, 772], vec![346, 778], vec![67, 935], vec![234, 284], vec![92, 778], vec![274, 316], vec![452, 674], vec![66, 150], vec![253, 477], vec![703, 848], vec![869, 900], vec![845, 987], vec![308, 359], vec![425, 545], vec![780, 829], vec![4, 846], vec![502, 842], vec![120, 697], vec![86, 768], vec![206, 451], vec![520, 939], vec![498, 813], vec![495, 871], vec![49, 488], vec![608, 797], vec![181, 610], vec![33, 41], vec![139, 293], vec![96, 514], vec![839, 883], vec![229, 722], vec![8, 71], vec![42, 326], vec![102, 684], vec![618, 796], vec![577, 905], vec![284, 734], vec![187, 333], vec![310, 745], vec![341, 997], vec![629, 630], vec![861, 965], vec![617, 964], vec![220, 845], vec![173, 481], vec![261, 878], vec![335, 934], vec![110, 879], vec![222, 266], vec![446, 454], vec![119, 516], vec![147, 660], vec![122, 771], vec![540, 609], vec![13, 670], vec![269, 727]], vec![0.88, 0.59, 0.67, 0.93, 0.76, 0.88, 0.9, 0.95, 0.7, 0.95, 0.69, 0.87, 0.7, 0.74, 0.95, 0.89, 0.71, 0.87, 0.83, 0.98, 0.91, 0.75, 0.63, 0.85, 0.9, 0.7, 0.73, 0.58, 0.56, 0.58, 0.88, 0.78, 0.98, 0.58, 0.94, 0.93, 0.91, 0.81, 0.7, 0.71, 0.75, 0.74, 0.78, 0.58, 0.89, 0.68, 0.99, 0.93, 0.63, 0.53, 0.64, 0.57, 0.91, 0.7, 0.99, 0.66, 0.69, 0.89, 0.83, 0.66, 0.77, 0.85, 0.53, 0.96, 0.95, 0.79, 0.86, 0.54, 0.97, 0.61, 0.66, 0.59, 0.67, 0.55, 0.73, 0.68, 0.96, 0.99, 0.59, 0.67, 0.81, 0.61, 0.92, 0.69, 0.93, 0.7, 0.99, 0.76, 0.81, 0.85, 1.0, 0.54, 0.8, 0.55, 0.51, 0.89, 0.83, 0.75, 0.92, 0.75, 0.8, 0.58, 0.88, 0.73, 0.73, 0.93, 0.52, 0.52, 0.61, 0.54, 0.88, 0.55, 0.91, 0.53, 0.63, 0.56, 0.52, 0.92, 0.54, 0.86, 0.8, 0.77, 0.85, 0.66, 0.82, 0.94, 0.84, 0.64, 0.8, 0.52, 0.92, 0.59, 0.97, 0.87, 0.67, 0.71, 0.81, 0.71, 0.93, 0.89, 0.77, 0.59, 0.86, 0.62, 0.64, 0.51, 0.69, 0.93, 0.59, 0.74, 0.99, 0.8, 0.53, 0.85, 0.69, 0.92, 0.62, 0.9, 0.83, 0.74, 0.85, 0.93, 0.87, 0.85, 0.59, 0.93, 0.56, 0.98, 0.59, 0.75, 0.89, 0.64, 0.53, 0.65, 0.72, 0.88, 0.78, 0.76, 0.56, 0.85, 0.71, 0.81, 0.53, 0.77, 0.91, 0.55, 0.7, 0.65, 0.62, 0.67, 0.82, 0.68, 0.72, 0.92, 0.76, 0.67, 0.62, 0.95, 0.64, 0.92, 0.77, 0.93, 0.87, 1.0, 0.92, 0.86, 0.59, 0.62, 0.62, 0.54, 0.65, 0.79, 0.8, 0.93, 0.92, 0.53, 0.88, 0.58, 0.67, 1.0, 0.82, 1.0, 0.7, 0.8, 0.62, 0.68, 0.86, 0.62, 0.69, 0.52, 0.76, 0.53, 0.57, 0.52, 0.55, 0.92, 0.6, 0.98, 0.52, 0.88, 0.89, 0.68, 0.78, 0.87, 0.92, 0.96, 0.82, 0.97, 0.54, 0.92, 0.81, 0.53, 0.92, 0.87, 0.74, 0.68, 0.77, 0.99, 0.89, 0.84, 0.65, 0.88, 0.53, 0.97, 0.66, 0.72, 0.97, 0.56, 0.57, 0.59, 0.76, 0.81, 0.77, 0.95, 0.82, 0.67, 0.61, 0.86, 0.58, 0.83, 0.83, 0.51, 0.65, 0.6, 0.53, 0.61, 0.75, 0.63, 0.8, 0.94, 0.86, 0.75, 0.52, 0.81, 0.91, 0.61, 0.57, 0.78, 0.85, 0.62, 0.56, 0.59, 0.89, 0.56, 0.94, 0.84, 0.88, 0.7, 0.9, 0.72, 0.94, 0.94, 0.91, 0.94, 0.69, 0.98, 0.86, 0.51, 0.69, 0.8, 0.69, 0.89, 0.61, 0.85, 0.55, 0.55, 0.92, 0.85, 0.76, 0.74, 0.91, 0.7, 0.66, 0.54, 0.6, 0.51, 0.55, 0.83, 0.86, 0.66, 0.61, 0.67, 0.67, 0.84, 0.85, 0.68, 0.81, 0.89, 0.73, 0.98, 0.65, 0.96, 0.53, 0.54, 0.7, 0.89, 0.91, 0.82, 0.72, 0.65, 0.93, 1.0, 0.87, 0.92, 0.54, 0.9, 0.71, 0.69, 0.5, 0.75, 0.5, 0.95, 0.98, 0.95, 0.64, 0.84, 0.56, 0.98, 0.9, 0.7, 0.7, 0.51, 0.52, 0.73, 0.9, 0.86, 0.59, 0.69, 0.57, 0.72, 0.87, 0.9, 0.53, 0.79, 0.74, 0.98, 0.83, 0.64, 0.7, 0.78, 0.62, 0.51, 0.85, 0.57, 0.95, 0.54, 0.8, 0.95, 0.97, 0.94, 0.89, 0.53, 0.8, 0.9, 0.81, 0.72, 0.89, 0.69, 0.51, 0.87, 0.54, 0.91, 0.99, 0.67, 0.82, 0.75, 0.84, 0.57, 0.69, 0.69, 0.89, 0.93, 0.51, 0.82, 0.57, 0.73, 0.68, 0.8, 0.62, 0.94, 0.64, 0.6, 0.62, 0.81, 0.52, 0.72, 0.52, 0.92, 0.97, 0.59, 0.86, 0.71, 0.67, 0.75, 0.76, 0.79, 0.88, 0.52, 0.88, 0.88, 0.79, 0.79, 0.83, 0.71, 0.74, 0.62, 0.68, 0.68, 0.7, 0.69, 0.92, 0.98, 0.67, 0.94, 0.7, 0.81, 0.97, 0.63, 0.68, 0.78, 0.92, 0.69, 0.64, 0.52, 0.62, 0.55, 0.51, 0.53, 0.76, 0.71, 0.7, 0.65, 0.61, 0.51, 0.64, 0.85, 0.95, 0.95, 0.61, 0.59, 0.54, 0.81, 0.54, 0.98, 0.7, 0.57, 0.95, 0.85, 0.72, 0.78, 0.98, 0.88, 0.95, 0.86, 0.91, 0.52, 0.79, 0.97, 0.59, 0.69, 0.95, 0.94, 0.54, 0.62, 0.56, 0.51, 0.87, 0.99, 0.52, 0.51, 0.69, 0.9, 0.94, 0.73, 0.79, 1.0, 0.97, 0.5, 0.84, 0.57, 0.55, 0.88, 0.8, 0.96, 0.57, 0.68, 0.82, 0.62, 0.77, 0.73, 0.79, 0.89, 0.54, 0.93, 0.96, 0.77, 0.68, 0.62, 0.66, 0.59, 0.98, 0.57, 0.51, 0.92, 0.59, 0.5, 0.73, 0.62, 0.99, 0.88, 0.68, 0.58, 0.73, 0.59, 0.58, 0.87, 0.93, 0.92, 0.51, 0.88, 0.92, 0.57, 0.55, 0.88, 0.94, 0.95, 0.84, 0.76, 0.87, 0.85, 0.61, 0.7, 0.8, 0.69, 0.59, 0.7, 0.77, 0.91, 0.56, 0.52, 0.85, 0.89, 0.88, 0.55, 0.72, 0.91, 0.7, 0.62, 0.54, 0.94, 0.69, 0.79, 0.64, 0.53, 0.65, 0.73, 0.92, 0.77, 0.77, 0.55, 0.74, 0.96, 0.6, 0.58, 0.88, 0.94, 0.54, 0.58, 0.95, 0.69, 0.9, 0.78, 0.56, 0.51, 0.9, 0.55, 0.58, 0.81, 0.67, 0.82, 0.74, 0.55, 0.8, 0.75, 0.54, 0.7, 0.9, 0.78, 0.8, 0.81, 0.65, 0.93, 0.53, 0.73, 0.6, 0.67, 0.81, 0.62, 0.7, 0.65, 0.72, 0.61, 0.86, 0.99, 0.87, 0.72, 0.53, 0.83, 0.91, 0.81, 0.86, 0.86, 0.78, 0.57, 0.98, 0.56, 0.98, 0.97, 0.56, 0.91, 0.9, 0.6, 0.53, 0.51, 0.87, 0.69, 0.98, 0.52, 0.8, 0.56, 0.57, 0.61, 0.9, 0.73, 0.8, 0.6, 0.9, 0.79, 0.62, 0.57, 0.73, 0.76, 0.97, 0.87, 0.82, 0.76, 0.91, 0.86, 0.88, 0.51, 0.54, 0.77, 0.62, 0.72, 0.51, 0.92, 0.52, 0.82, 0.94, 0.81, 0.59, 0.66, 0.58, 0.67, 0.92, 0.5, 0.91, 0.97, 0.93, 0.81, 0.67, 0.68, 0.9, 0.54, 0.9, 0.84, 0.85, 0.62, 0.95, 0.81, 0.76, 0.54, 0.62, 0.83, 0.75, 0.66, 0.8, 0.74, 0.96, 0.84, 0.6, 0.73, 0.81, 0.55, 0.69, 0.81, 0.84, 0.74, 0.77, 0.87, 0.81, 0.82, 0.82, 0.86, 0.51, 0.64, 0.62, 0.69, 0.53, 0.86, 0.53, 0.56, 0.55, 0.95, 0.59, 0.73, 0.62, 0.97, 0.58, 0.68, 0.87, 0.74, 0.81, 0.54, 0.98, 0.86, 0.75, 0.87, 0.53, 0.55, 0.6, 0.79, 0.75, 0.75, 0.55, 0.88, 0.77, 0.75, 0.53, 0.96, 0.84, 0.63, 0.67, 0.89, 0.63, 0.97, 0.62, 0.56, 0.81, 0.61, 0.69, 0.7, 0.98, 0.65, 0.6, 0.96, 0.82, 0.75, 0.69, 0.74, 0.82, 0.91, 0.86, 0.85, 0.89, 0.51, 0.51, 0.6, 0.81, 0.68, 0.9, 0.74, 1.0, 0.85, 0.53, 0.72, 0.5, 0.74, 0.54, 0.69, 0.75, 0.71, 0.95, 0.77, 0.77, 0.84, 0.55, 0.74, 0.61, 0.54, 0.65, 0.94, 0.67, 0.71, 0.65, 0.91, 1.0, 0.7, 0.62, 0.65, 0.81, 0.78, 0.76, 0.88, 0.7, 0.88, 0.79, 0.67, 0.94, 0.98, 0.67, 0.64, 0.63, 0.56, 0.97, 0.68, 0.89, 0.59, 0.7, 0.52, 0.61, 0.84, 0.87, 0.75, 0.9, 0.61, 0.52, 1.0, 0.88, 0.82, 0.64, 0.72, 0.81, 0.89, 0.98, 0.63, 0.99, 0.63, 0.8, 0.72, 0.91, 0.56, 0.98, 0.7, 0.93, 0.68, 0.7, 0.58, 0.93, 0.66, 0.99, 0.81, 0.89, 0.82, 0.94, 0.81, 0.87, 0.57, 0.52, 0.8, 0.84, 0.5, 0.83, 0.73, 0.84, 0.5, 0.72, 0.74, 0.82, 0.56, 0.74, 0.76, 0.83, 0.74, 0.54, 0.62, 0.96, 0.61, 0.53, 0.59, 0.87, 0.96, 0.6, 0.67, 0.99, 0.72, 0.94, 0.57, 0.88, 0.55, 0.77, 0.89, 0.83, 0.68, 0.86, 0.81, 0.6, 0.58, 0.56, 0.79, 0.65, 0.61, 0.54, 0.66, 0.52, 0.61, 0.64, 0.88, 0.71, 0.52, 0.84, 0.81, 0.92, 0.64, 0.64, 0.95, 0.53, 0.92, 0.69, 0.8, 0.81, 0.54, 0.7, 0.55, 0.81, 0.95, 0.99, 0.59, 0.9, 0.97, 0.67, 0.69, 0.88, 0.58, 0.55, 0.58, 0.91, 0.57, 0.8, 0.59, 0.72, 0.64, 0.95, 0.54, 0.51, 0.63, 0.89, 0.92, 0.78, 0.71, 0.66, 0.73, 0.8, 0.66, 0.95, 0.54, 0.51, 0.78, 0.7, 0.76, 0.86, 0.59, 0.76, 0.64, 0.81, 0.58, 0.62, 0.86, 0.89, 0.6, 0.74, 0.78, 0.9, 0.72, 0.91, 0.63, 0.69, 0.76, 0.58, 0.97, 0.9, 0.77, 0.78, 0.5, 0.78, 0.69, 0.78, 1.0, 0.52, 0.81, 0.9, 0.56, 0.69, 0.58, 0.58, 0.6, 0.68, 0.82, 0.99, 0.52, 0.92, 0.67, 0.61, 0.71, 0.99, 0.56, 0.6, 0.62, 0.85, 0.84, 0.99, 0.59, 0.51, 0.78, 0.85, 0.54, 0.7, 0.9, 0.56, 0.89, 0.91, 0.52, 0.5, 0.63, 0.6, 0.65, 0.94, 0.7, 0.93, 0.92, 0.64, 0.89, 0.74, 0.74, 0.64, 0.86, 0.91, 0.55, 0.9, 0.51, 0.86, 0.84, 0.56, 0.98, 1.0, 0.78, 0.72, 0.71, 0.86, 0.99, 0.64, 0.58, 0.51, 0.96, 0.68, 0.91, 0.52, 0.57, 0.79, 0.81, 0.61, 0.57, 0.86, 0.66, 0.76, 0.61, 0.56, 0.73, 0.75, 0.83, 0.69, 0.57, 0.58, 0.59, 0.53, 0.84, 0.8, 0.79, 0.8, 0.75, 0.97, 0.58, 0.89, 0.88, 0.54, 0.75, 0.71, 0.62, 0.76, 0.85, 0.52, 0.94, 0.71, 0.73, 0.8, 0.67, 0.87, 0.54, 0.72, 0.72, 0.64, 0.71, 0.66, 0.68, 0.53, 0.78, 0.65, 0.77, 0.97, 0.84, 0.57, 0.85, 0.67, 0.87, 0.59, 0.68, 0.9, 0.79, 0.54, 0.5, 0.53, 0.97, 0.74, 0.89, 0.98, 0.96, 0.9, 0.84, 0.8, 0.56, 0.67, 0.87, 0.8, 0.77, 0.62, 0.65, 0.74, 0.93, 0.7, 0.81, 0.77, 0.61, 0.85, 0.9, 0.67, 0.73, 0.87, 0.77, 0.91, 0.87, 0.93, 0.61, 0.85, 0.87, 0.76, 0.63, 0.52, 0.95, 0.84, 0.87, 0.55, 0.87, 0.76, 0.58, 0.7, 0.53, 0.93, 0.76, 0.52, 0.79, 0.68, 0.65, 0.66, 0.53, 0.89, 0.5, 0.77, 0.6, 0.52, 0.61, 0.7, 0.63, 0.88, 0.56, 0.68, 0.85, 0.87, 0.73, 0.84, 0.87, 0.55, 0.99, 0.53, 0.82, 0.91, 0.91, 0.81, 0.85, 0.57, 0.58, 0.84, 0.92, 0.74, 0.52, 0.9, 0.88, 0.75, 0.61, 0.62, 0.55, 0.56, 0.92, 0.62, 0.64, 0.56, 0.64, 0.73, 0.88, 0.98, 0.54, 0.75, 0.8, 0.53, 0.92, 0.75, 0.72, 0.94, 0.93, 0.79, 0.95, 0.61, 0.99, 0.57, 0.74, 0.56, 0.76, 0.53, 0.9, 0.65, 0.94, 0.89, 0.84, 0.87, 0.82, 0.67, 0.7, 0.87, 0.92, 0.57, 0.63, 0.87, 0.66, 0.71, 0.61, 0.7, 0.73, 0.92, 0.9, 0.75, 0.84, 0.96, 0.6, 0.58, 0.57, 0.65, 0.64, 0.63, 0.71, 0.62, 0.83, 0.58, 0.79, 0.68, 0.59, 0.85, 0.7, 0.54, 0.63, 0.91, 0.64, 0.74, 0.66, 0.76, 0.76, 0.97, 0.96, 0.95, 0.94, 0.89, 0.67, 0.69, 0.85, 0.82, 0.55, 0.64, 0.89, 0.64, 0.64, 0.87, 0.53, 0.56, 0.68, 0.55, 0.78, 0.94, 0.63, 0.85, 0.61, 0.83, 0.8, 0.61, 0.84, 0.83, 0.91, 0.76, 0.55, 0.84, 0.52, 0.96, 1.0, 0.6, 0.71, 0.97, 0.62, 0.88, 0.52, 0.69, 0.71, 0.82, 0.66, 0.87, 0.66, 0.73, 0.6, 0.58, 0.61, 0.89, 0.84, 0.53, 0.77, 0.83, 0.8, 0.51, 0.63, 0.75, 0.65, 0.95, 0.51, 0.93, 0.53, 0.51, 0.54, 0.74, 0.82, 0.54, 0.56, 0.62, 0.69, 0.7, 0.64, 0.92, 0.5, 0.54, 0.87, 0.91, 0.63, 0.9, 0.59, 0.55, 0.59, 0.6, 0.8, 0.9, 0.54, 0.89, 0.85, 0.65, 0.69, 0.8, 0.88, 0.83, 0.62, 0.75, 0.71, 0.52, 0.71, 0.89, 0.94, 0.56, 0.93, 0.92, 0.78, 0.55, 0.98, 0.52, 0.77, 0.83, 0.92, 0.78, 0.58, 0.66, 0.76, 0.53, 0.7, 0.91, 0.55, 0.55, 0.56, 0.75, 0.75, 0.81, 0.91, 0.55, 0.98, 0.94, 0.64, 0.77, 0.84, 0.93, 0.75, 0.64, 0.93, 0.87, 0.7, 0.82, 0.93, 0.66, 0.74, 0.51, 0.96, 0.85, 0.63, 0.99, 0.59, 0.9, 0.53, 0.87, 0.74, 0.68, 0.74, 1.0, 0.54, 1.0, 0.93, 0.99, 0.65, 0.71, 0.51, 0.99, 0.76, 0.6, 0.61, 0.91, 0.62, 0.93, 0.6, 0.69, 0.57, 0.82, 0.85, 0.84, 0.77, 0.66, 0.77, 0.66, 0.74, 0.94, 0.72, 0.79, 0.66, 0.94, 0.84, 0.84, 0.75, 0.52, 0.66, 0.58, 0.64, 0.52, 0.52, 0.87, 0.69, 0.75, 0.77, 0.68, 0.82, 0.87, 0.95, 0.94, 0.71, 0.53, 0.8, 0.51, 1.0, 0.93, 0.58, 0.65, 0.66, 0.66, 0.93, 1.0, 0.52, 0.52, 0.56, 0.69, 0.66, 0.52, 0.78, 0.54, 0.56, 0.58, 0.82, 0.74, 0.85, 0.51, 0.51, 0.76, 0.87, 0.81, 0.81, 0.87, 0.9, 0.85, 0.92, 0.85, 0.87, 0.97, 0.58, 0.98, 0.54, 0.81, 0.75, 0.72, 0.7, 0.56, 0.83, 0.81, 0.95, 0.8, 0.88, 0.87, 0.55, 0.95, 0.67, 0.68, 0.93, 0.71, 0.53, 0.74, 0.72, 0.92, 0.97, 0.84, 0.81, 0.86, 0.92, 0.56, 0.59, 0.59, 0.81, 0.61, 0.86, 0.89, 0.53, 0.7, 0.61, 0.57, 0.6, 0.95, 0.62, 0.6, 0.94, 0.68, 0.85, 0.72, 0.64, 0.79, 0.7, 0.82, 0.72, 0.93, 0.59, 0.7, 0.67, 0.86, 0.86, 0.77, 0.95, 0.83, 0.82, 0.93, 0.92, 0.61, 0.53, 0.94, 0.66, 0.67, 0.78, 0.88, 0.68, 0.93, 0.9, 0.82, 0.83, 0.73, 0.74, 0.6, 0.95, 0.8, 0.62, 0.99, 0.9, 0.81, 0.58, 0.6, 0.59, 0.6, 0.74, 0.81, 0.69, 0.76, 0.88, 0.82, 0.5, 0.88, 0.9, 0.86, 0.72, 0.56, 0.9, 0.84, 0.78, 0.88, 0.52, 0.83, 0.74, 0.6, 0.7, 0.99, 0.54, 0.6, 0.94, 0.79, 0.96, 0.64, 0.51, 0.64, 0.55, 0.5, 0.92, 0.57, 0.97, 0.62, 0.57, 0.76, 0.57, 0.81, 0.54, 0.59, 0.75, 0.6, 0.97, 0.68, 0.53, 0.6, 0.64, 0.88, 0.88, 0.97, 0.91, 0.62, 0.7, 0.91, 0.56, 0.61, 0.82, 0.99, 0.7, 0.93, 0.93, 0.71, 0.81, 0.64, 0.87, 0.76, 0.75, 0.97, 0.92, 0.91, 0.53, 0.68, 0.78, 0.95, 0.58, 0.72, 0.88, 0.57, 0.61, 0.86, 0.83, 0.91, 0.6, 0.74, 0.83, 0.59, 0.69, 0.77, 0.73, 0.76, 0.8, 0.69, 0.74, 0.85, 0.82, 0.98, 0.75, 0.67, 0.52, 0.57, 0.72, 0.73, 0.71, 0.79, 0.86, 0.55, 0.99, 0.84, 0.97, 0.74, 0.77, 0.71, 0.8, 0.77, 0.85, 0.73, 0.61, 0.85, 0.56, 0.91, 0.74, 0.54, 0.69, 0.84, 0.91, 0.94, 0.86, 0.53, 0.58, 0.53, 0.6, 0.8, 0.84, 0.95, 0.96, 0.72, 0.65, 0.64, 0.84, 0.93, 0.53, 0.63, 0.76, 0.55, 0.9, 0.63, 0.68, 0.93, 0.54, 0.5, 0.55, 0.66, 0.54, 0.81, 0.57, 0.53, 0.64, 0.69, 0.62, 0.65, 0.51, 0.98, 0.75, 0.59, 0.57, 0.62, 0.63, 0.86, 0.78, 0.56, 0.84, 0.82, 0.68, 0.93, 0.77, 0.98, 0.51, 0.79, 0.77, 0.64, 0.85, 0.78, 0.66, 0.54, 0.62, 0.6, 0.93, 0.9, 0.6, 0.96, 0.93, 0.99, 0.52, 0.82, 0.56, 0.72, 0.87, 0.61, 0.5, 0.94, 0.77, 0.63, 0.8, 0.75, 0.87, 0.56, 0.78, 0.89, 0.86, 0.75, 0.93, 0.82, 0.78, 0.76, 0.92, 0.75, 0.58, 0.75, 0.79, 0.95, 0.74, 0.94, 0.69, 0.51, 0.74, 0.68, 0.58, 0.53, 0.94, 0.65, 0.94, 0.72, 0.89, 0.96, 1.0, 0.67, 0.64, 0.87, 0.89, 0.78, 0.76, 0.51, 0.81, 0.9, 0.63, 0.93], 112, 493);
let expected = 0.3441384;
let pass = (val - expected).abs() < 1e-5;
log_result!(pass, "t6", start, &expected, &val);
assert!(pass);
} Runtime Distribution
5277.2 µs
5588.8 µs
6132.3 µs
5071.4 µs
5981.6 µs
7011.0 µs
#1
#2
#3
#4
#5
#6
2 ≤ n ≤ 10^4
0 ≤ start, end < n
start ≠ end
0 ≤ a, b < n
a ≠ b
0 ≤ succProb.length = edges.length ≤ 2*10^4
0 ≤ succProb[i] ≤ 1
There is at most one edge between every two nodes.
Solution
Rust
Time O(n * m)
Space O(n * m)
use std::collections::BinaryHeap;
impl Solution {
pub fn max_probability(
n: i32,
edges: Vec<Vec<i32>>,
succ_prob: Vec<f64>,
start_node: i32,
end_node: i32,
) -> f64 {
let n = n as usize;
let s = start_node as usize;
let e = end_node as usize;
let mut adj: Vec<Vec<(usize, f64)>> = vec![vec![]; n];
for (i, edge) in edges.iter().enumerate() {
let (a, b) = (edge[0] as usize, edge[1] as usize);
adj[a].push((b, succ_prob[i]));
adj[b].push((a, succ_prob[i]));
}
let mut prob = vec![0.0f64; n];
prob[s] = 1.0;
// Max-heap using to_bits(): for non-negative f64, bit ordering == numeric ordering
let mut heap: BinaryHeap<(u64, usize)> = BinaryHeap::new();
heap.push((1.0f64.to_bits(), s));
while let Some((p_bits, u)) = heap.pop() {
let p = f64::from_bits(p_bits);
if u == e { return p; }
if p < prob[u] { continue; }
for &(v, w) in &adj[u] {
let np = prob[u] * w;
if np > prob[v] {
prob[v] = np;
heap.push((np.to_bits(), v));
}
}
}
prob[e]
}
}