求助:如何把Tarjan缩点后建立新图?

P3387 【模板】缩点

@[Jerrycyx](/user/545986) 您在缩点时已经记录了每个点所属的强连通分量,那么只需要把之前每个点之间连的边转换到强连通分量上连的边即可。
by huangkx @ 2022-05-08 21:33:23


@[Jerrycyx](/user/545986) 我的写法: ```cpp for(int u = 1; u <= n; u ++) if(dfn[u] == 0) Tarjan(u); for(int u = 1; u <= n; u ++){ val[color[u]] += a[u]; for(int v : g[u]){ if(color[u] == color[v]) continue; ng[color[u]].push_back(color[v]); in[color[v]] ++; } } ```
by huangkx @ 2022-05-08 21:34:38


@[huangkx](/user/232838) 感谢!
by Jerrycyx @ 2022-05-08 21:35:58


val[u]表示强连通分量u中的点数; color[u]表示u所属的强连通分量的编号; v表示与u相连的节点(u->v); ng[]表示新图; in[]表示入度。
by huangkx @ 2022-05-08 21:36:57


|