void tarjan(int u){
st[++top]=u;vis[u]=1;dfn[u]=low[u]=++idx;
for(int v:e[u]){
if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
else if(vis[v])low[u]=min(low[u],low[v]);
}
if(low[u]==dfn[u]){
++cnt;
do{
vis[st[top]]=0;id[st[top]]=cnt;s[cnt]+=a[st[top]];
}while(st[top--]!=u);
}
}