La define è una direttiva al precompilatore e serve a definire (in quel caso) una "costante simbolica", praticamente per migliorare la leggibilità (ma anche la scrittura) del codice associ al numero 987654321 un alias che è appunto "SEED", quindi quando lo vai ad utilizzare qui

codice:
srand(SEED);
di fatto è come se stessi scrivendo

codice:
srand(987654321);
anzi, per essere più precisi il codice che poi viene compilato davvero contiene proprio questa seconda istruzione, che sostituisce la prima appunto quando entra in funzione il precompilatore che va a sostituire tutte le occorrenze di SEED con il valore numerico associato. In realtà la #define può avere anche altre utilità, ma in quel caso non c'è niente di diverso da quello che ti ho detto.

Sul significato del valore, "seed" significa "seme", si riferisce al "seme di inizializzazione" del generatore di numeri pseudo-casuali che in C si assegna proprio con la funzione srand(). Chiaramente avresti potuto specificare qualsiasi altro nome invece di SEED, quello che conta è l'uso che ne fai (oltre al fatto di dargli comunque un nome significativo per motivi di logica).