自认为Tarjan写的没问题
求条
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,m;
vector<int> E[maxn];
int dfn[maxn],low[maxn],num,cnt,ans[maxn],size[maxn];
inline void tarjan(int u,int fa){
dfn[u]=low[u]=++num;
long long sum=0;
size[u]=1;
int s=0;
for(auto v:E[u]){
if(!dfn[v]){
s++;
tarjan(v,u);
size[u]+=size[v];
low[u]=min(low[v],low[u]);
if(low[v]>=dfn[u]){
ans[u]+=size[v]*sum;
sum+=size[v];
}
}else if(v!=fa){
low[u]=min(low[u],dfn[v]);
}
}
ans[u]+=(n-sum-1)*sum;
ans[u]+=n-1;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
E[u].push_back(v);
E[v].push_back(u);
}
tarjan(1,0);
for(int i=1;i<=n;++i){
cout<<ans[i]*2;
putchar('\n');
}
return 0;
}