```cpp
else if(vis[to]){
low[u]=min(low[u],low[to]);
}
```
改成
```cpp
else if(vis[to]){
low[u]=min(low[u],dfn[to]);
}
```
试试
by zhangjiahao @ 2023-02-03 10:00:55
@[zhangjiahao](/user/416716) 改了,而且换掉了出锅的dfs,但是现在好像不会算缩过之后的点权了。
by __Thaumic_Executor__ @ 2023-02-03 12:26:39
@[__Thaumic_Executor__](/user/765382)
1.
```cpp
if(dfn[u]==low[u]){
idx++;
while(1){
int x=s.top(); s.pop();
scc[x]=idx; vis[x]=0;
if(x==u) break;
dq[idx]+=val[x];
}
}
```
加上
```dq[idx]+=val[u];```
2. Line 6
```cpp
int low[N],rd[N],fr[N],dfn[N],scc[N],vis[N];
```
fr 的数组开小了
by tribool4_in @ 2023-02-03 13:00:41
@[_504](/user/341650) thx
by __Thaumic_Executor__ @ 2023-02-03 14:03:37