题意:
给定一张 n n n个点, m m m条边的有向图,求每条边被多少最短路经过
范围&性质: 1 ≤ n ≤ 1500 , 1 ≤ m ≤ 5000 1\le n\le 1500,1\le m\le 5000 1≤n≤1500,1≤m≤5000
分析:
枚举起点,对于每一个起点,建一颗最短路径树(准确来说是一个DAG),然后枚举边计算贡献,由乘法原理得,一个边会被 c n t 1 [ f r m ] × c n t 2 [ t o ] cnt1[frm]\times cnt2[to] cnt1[frm]×cnt2[to]条路径经过,其中 c n t 1 [ f r m ] cnt1[frm] cnt1[frm]表示起点到这条边的发出点的方案数, c n t 2 [ t o ] cnt2[to] cnt2[to]表示终点到这条边结束点的方案数,方案数可以拓扑排序求得顺序求 c n t 1 cnt1 cnt1,记一下拓扑序后反向求 c n t 2 cnt2