Background: I am a Chinese student learning English like mad.
First of all, I eliminated both option A & B because there's only one single sentence, so if A or B were used, there needs to be a conjunction after the comma (
...snowstorm, so we...). Therefore the former part of the sentnece must be a dependent clause. A comma should never separate two full sentences.
Now look at option C and D. The flights were canceled. They can't cancel themselves, so a passive voice should be used. Thus, "having been canceled" fits best here in the given scenario.
Extras: Why not use "being canceled"? Because event "the flights are canceled" happened before "we have to take the train", and it's a prerequisite of "we take the train". The two things happened one by one, so a perfect tense is used here.