求一个有向图中,从所有起点(入度为0)到终点(唯一,出度为0)经过的次数最多的边经过的次数,两次拓扑排序,一次向前求出所有起点到某个点的所有路径总数f[i],一次向后,求出某个点到终点的所有路径总数g[i],则对一条边(u,v),f[u]*g[v]即为边所需要经过的次数。
View Code
1 #include2 #include 3 #define N 1005//数据范围没有题中描述的那么大…… 4 #define M 10005 5 int map[N][N]; 6 int edge[M][2]; 7 int in[N],out[N],f[N],g[N]; 8 int que[N]; 9 void init()10 {11 memset(in,0,sizeof(in));12 memset(out,0,sizeof(out));13 memset(f,0,sizeof(f));14 memset(g,0,sizeof(g));15 memset(map,0,sizeof(map));16 }17 int main()18 {19 int n,m,i,j,fr,r,u,v,max;20 scanf("%d%d",&n,&m);21 init();22 for(i=0;i