Async Dependency Finish Time
JavaScript
Hard
4 views
Problem Description
You have tasks 1..n with durations. Also m dependencies (u v) meaning u must finish before v starts. Compute total minimum time to finish all tasks (no worker limit).
Input Format
Line1: n m. Line2: n durations. Next m lines: u v.
Output Format
One integer total time.
Sample Test Case
Input:
4 3
3 2 4 1
1 3
2 3
3 4
Official Solution
const fs=require('fs');const lines=fs.readFileSync(0,'utf8').trim().split(/\
?\
/);if(!lines[0])process.exit(0);let [n,m]=lines[0].trim().split(/\\s+/).map(Number);let dur=lines[1].trim().split(/\\s+/).map(BigInt);let g=Array.from({length:n+1},()=>[]);let indeg=new Array(n+1).fill(0);for(let i=0;i<m;i++){const [u,v]=lines[2+i].trim().split(/\\s+/).map(Number);g[u].push(v);indeg[v]++;}let q=[];for(let i=1;i<=n;i++)if(indeg[i]===0)q.push(i);let head=0;let dp=new Array(n+1).fill(0n);for(let i=1;i<=n;i++)dp[i]=dur[i-1];while(head<q.length){const u=q[head++];for(const v of g[u]){if(dp[v]<dp[u]+dur[v-1])dp[v]=dp[u]+dur[v-1];indeg[v]--;if(indeg[v]===0)q.push(v);}}const compute=async()=>{await Promise.resolve();let best=0n;for(let i=1;i<=n;i++)if(dp[i]>best)best=dp[i];return best;};(async()=>{process.stdout.write((await compute()).toString());})();
Solutions (0)
No solutions submitted yet. Be the first!
No comments yet. Start the discussion!