In my class we have discussed the fact that, given a representation $\langle R\rangle$ of a regular expression $R$, we can decide whether it accepts any string by first finding an equivalent NFA, and then seeing if there is a path from the start to an accepting vertex. This can be done in polynomial time.
However, we have also said that it is NP-hard to determine whether $L(R)\ne\{0,1\}^*$. That is to say, the language $\{\langle R\rangle: R \text{ is a RE and } L(R)\ne\{0,1\}^*\}$ is NP-hard.
I'm having a hard time reconciling these two facts. To decide whether $L(R)\ne \{0,1\}^*$, it is equivalent to decide whether $\overline{L(R)} \ne \emptyset$, which we can do in polynomial time. I'm sure there's something I'm misunderstanding but I can't tell what.