This is a rigorous introduction to some topics in mathematics that underlie areas in computer science and computer engineering, including: graphs and trees, spanning trees, colorings and matchings, the pigeonhole principle, induction and recursion, generating functions, and (if time permits) combinatorial geometry. The course integrates mathematical theories with applications to concrete problems from other disciplines using discrete modeling techniques.