Posts

Showing posts from August, 2024

2699 - Modify Graph Edge Weights

 JAVA class Solution { private final int inf = 2000000000 ; public int [][] modifiedGraphEdges ( int n , int [][] edges , int source , int destination , int target ) { long d = dijkstra ( edges , n , source , destination ); if ( d < target ) { return new int [ 0 ][]; } boolean ok = d == target ; for ( var e : edges ) { if ( e [ 2 ] > 0 ) { continue ; } if ( ok ) { e [ 2 ] = inf ; continue ; } e [ 2 ] = 1 ; d = dijkstra ( edges , n , source , destination ); if ( d <= target ) { ok = true ; e [ 2 ] += target - d ; } } return ok ? edges : new int [ 0 ][]; } private long dijkstra ( int [][] edges , int n , int src , ...

947 - Most Stones Removed with Same Row or Column

 JAVA class Solution { private int [] p ; public int removeStones ( int [][] stones ) { int n = 10010 ; p = new int [ n << 1 ]; for ( int i = 0 ; i < p . length ; ++ i ) { p [ i ] = i ; } for ( int [] stone : stones ) { p [ find ( stone [ 0 ])] = find ( stone [ 1 ] + n ); } Set < Integer > s = new HashSet <>(); for ( int [] stone : stones ) { s . add ( find ( stone [ 0 ])); } return stones . length - s . size (); } private int find ( int x ) { if ( p [ x ] != x ) { p [ x ] = find ( p [ x ]); } return p [ x ]; } } C++ class Solution { public: vector < int > p ; int removeStones ( vector < vector < int >>& stones ) { int n = 10010 ; p . resize ( n ...

1514 - Path with Maximum Probability

 JAVA class Solution { public double maxProbability ( int n , int [][] edges , double [] succProb , int start , int end ) { List < Pair < Integer , Double >>[] g = new List [ n ]; Arrays . setAll ( g , k -> new ArrayList <>()); for ( int i = 0 ; i < edges . length ; ++ i ) { int a = edges [ i ][ 0 ], b = edges [ i ][ 1 ]; double s = succProb [ i ]; g [ a ]. add ( new Pair <>( b , s )); g [ b ]. add ( new Pair <>( a , s )); } PriorityQueue < Pair < Double , Integer >> q = new PriorityQueue <>( Comparator . comparingDouble ( Pair: : getKey )); double [] d = new double [ n ]; d [ start ] = 1.0 ; q . offer ( new Pair <>(- 1.0 , start )); while (! q . isEmpty ()) { Pair < Double , Integer > p = q . ...