萌新缩点80球助,各位大佬CSP RP++

P3387 【模板】缩点

@[人林](/user/273468) 求最长路不能用dij,要用死了的spfa
by Belarus @ 2020-11-06 10:04:34


你的tarjan写错了8
by NuoCarter @ 2020-11-06 10:05:40


```cpp for(int j=0;j<e[i].size();j++) { int nex=e[i][j]; if(nex==i) continue; if(!dfn[nex]) { dfs(nex); low[i]=min(low[nex],low[i]); } else low[i]=min(low[i],dfn[nex]); } ``` 这里不能写else,应该判断是否在栈中
by NuoCarter @ 2020-11-06 10:06:20


```cpp inline void tarjan(int x){ dfn[x]=low[x]=++cnt; sta[++siz]=x;vis[x]=true; for(int i=head[x];i;i=Next[i]){ int y=to[i]; if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);} else if(vis[y]){low[x]=min(low[x],dfn[y]);} } if(dfn[x]==low[x]){ cntscc++; belong[x]=cntscc; fval[cntscc]+=val[x]; vis[x]=false; while(sta[siz]!=x){ fval[cntscc]+=val[sta[siz]]; belong[sta[siz]]=cntscc; vis[sta[siz--]]=false; } siz--; } } ```
by NuoCarter @ 2020-11-06 10:07:10


@[Belarus](/user/223392) 谢谢,但是为什么呢qwq
by YOKIMIYA @ 2020-11-06 10:09:44


@[人林](/user/273468) 最长路不满足Dijkstra三角形不等式的贪心规则
by Belarus @ 2020-11-06 10:11:08


@[NuoCarter](/user/67621) 那为什么要判断是否在栈内呢qwq
by YOKIMIYA @ 2020-11-06 10:19:39


@[Belarus](/user/223392) 噢噢噢噢明白了,谢谢大佬
by YOKIMIYA @ 2020-11-06 10:26:17


@[人林](/user/273468) low的定义是能够回溯到的最早已经在栈中的结点。。肯定要判断在不在栈中a。。你再看看缩点的讲解呢
by NuoCarter @ 2020-11-06 10:56:29


@[NuoCarter](/user/67621) 和我当初学的定义不太一样……我再去看看啦,谢谢大佬
by YOKIMIYA @ 2020-11-06 11:12:59


|