题目大意

题目解析

代码
#include<bits/stdc++.h>
#define N 50005
using namespace std;
int n,m,u,v,cnt;
int size[N],low[N],dfn[N],vis[N],ans[N];
vector<int> a[N];
void tarjan(int u,int f)
{
low[u]=dfn[u]=++cnt;
int L=0;
for(int i=0;i<a[u].size();i++)
{
int v=a[u][i];
vis[v]=0;
if(!dfn[v])
{
tarjan(v,u);
size[u]+=size[v];
if(dfn[u]<=low[v])
L+=size[v];
vis[v]=1;
}
if(v!=f)
low[u]=min(low[u],low[v]);
}
int A=0,B=0;
for(int i=0;i<a[u].size();i++)
{
int v=a[u][i];
if(dfn[u]<=low[v]&&vis[v])
{
A+=(L-size[v])*size[v];
B+=(n-L-1)*size[v];
}
}
A/=2;
ans[u]=A+B+n-1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
a[u].push_back(v);
a[v].push_back(u);
}
for(int i=1;i<=n;i++)
size[i]=1;
tarjan(1,0);
for(int i=1;i<=n;i++)
cout<<ans[i]<<endl;
}