You are helping some security analysts monitor a collection of networked computers tracking the spread of an online virus. There are n computers in the system, labeled C1, C2,...,Cn and as input you are given a collection of trace data indicating the times at which pairs of computers communicated. Thus the data is a sequence of ordered triples (Ci,Cj,tk) such a triple indicates that Ci and Cj exchanged bits at time tk. There are triples total. We will assume that the triples are presented to you in sorted order of time.
The security analysts you are working with would like to be able to answer questions of the following form: if the virus was inserted into computer Ca at time x could it possibly have infected computer Cb by time y? The mechanics of infection are simple: if an infected computer Cj exchanges bits with an uninfected computer at time tk (that is, if either of the triples (Ci,Cj,tk) or (Cj,Ci,tk) appears in the trace data) then Cj becomes infected as well, starting at time tk Infection can thus spread from one machine to another through a sequence of communications, which must happen in non-decreasing order of time. Describe an O(m+n) algorithm which, given an initial infection of a computer Ca at time t determines for each other computer the earliest time at which it can become infected. Your algorithm should keep track of enough information so that, for any computer Cb it is possible to retrieve in O(n) time a sequence of communications by which Cb could have become infected.