Update: TransitiveReductionGraph is much faster:
t1 = First[RepeatedTiming[g1 = TransitiveReductionGraph[g];]]
t2 = First[RepeatedTiming[g2 = Graph@Select[EdgeList[g],
Length[FindVertexIndependentPaths[g, ## & @@ #, Infinity]] == 1 &];]]
t3 = First[RepeatedTiming[g3 = AdjacencyGraph[1 -
Unitize[Sum[MatrixPower[c, k], {k, 20}] - 1]];]]
t4 = First[RepeatedTiming[g4 = prunedGraph[g];]]
t5 = First[RepeatedTiming[g5 = AdjacencyGraph[1 - Unitize[pathCounts[c] - 1]];]]
t0 = First[RepeatedTiming[g0=AdjacencyGraph@Table[If[c[[i, j]] == 1 &&
Length[Flatten[FindPath[g, i, j, n]]] == 2, 1, 0], {i, n}, {j, n}];]]
Equal @@ (EdgeList/@ {g0,g1, g2, g3, g4, g5})
True
Grid[Prepend[Transpose[{{"FindPath","TransitiveReductionGraph",
"FindVertexIndependentPaths", "MatrixPower", "prunedGraph", "pathCounts"},
{t0, t1, t2, t3, t4, t5}}], {"method", "RepeatedTiming"}], Dividers -> All] // TeXForm
$\begin{array}{|c|c|}
\hline
\text{method} & \text{RepeatedTiming} \\
\hline
\text{FindPath} & 2.211 \\
\hline
\text{TransitiveReductionGraph} & 0.0023 \\
\hline
\text{FindVertexIndependentPaths} & 0.34 \\
\hline
\text{MatrixPower} & 0.218 \\
\hline
\text{prunedGraph} & 0.128 \\
\hline
\text{pathCounts} & 0.0044 \\
\hline
\end{array} $
Although all five methods posted so far give the same result, as noted by Szabolcs in a comment, TransitiveReductionGraph has some yet-unfixed bugs. Carl's modification of Szabolc's approach is the fastest among remaining four methods posted so far.
Original answer:
You can use FindVertexIndependentPaths combined with Select:
Select[EdgeList[g], Length[FindVertexIndependentPaths[g, ##& @@ #, ∞]] == 1&] // Length //
AbsoluteTiming
{0.474247, 358}
Select[EdgeList[g], Length[FindVertexIndependentPaths[g, ##& @@ #, ∞]] == 1&] // Short
{1 -> 5, 1 -> 8, 1 -> 9, 1 -> 12, 1 -> 13, 1 -> 14, <<347>>, 101 -> 105, 102 -> 103, 103 -> 104, 103 -> 105, 105 -> 106}
FixedPoint[ c + #.c &, c, Length[c]]) instead. – Carl Woll Aug 23 '17 at 17:18