Topics and posts represented by one table or two?
Generally...

A a rule of thumb: don't pre-optimize for performance.  I think a lot of developers assume that joins are inefficient and they don't trust DBMS to do what it's built to do.

Start with a properly normalized design.  Make sure your indexes and queries are optimized for your particular balance of reads and writes.

If and when you start to find that performance can't keep up with the best hardware you can afford, then start to think about denormalizing.

If you denormalize early you are just setting yourself up for maintenance headaches down the road.

More Specifically...

Looking at your suggested table layouts, I would suggest that you're trying to make TOPIC do too much.  Anything which could appear in POST (e.g. poster_id) almost certainly doesn't belong in TOPIC.  I suggest you adjust your thinking a little bit.  I get the impression you are thinking very much about what topics and posts are going to look like on the page.  This may be leading you to thinking of topics as a small super-set of posts, whereas they are probably rather more like subject headings.  The fact that you plan on displaying the first post under each subject heading along with the heading isn't a good reason to co-mingle posts and headings.

I think you may want to rethink some of your cumulative total columns too.  Thinks like up and down votes may need to be tracked in their own tables.  You may need to do this to keep people from up or down voting repeatedly and to allow people to rescind their votes.  Similarly, you may want to know all editors, not just the last editor.