记录编号 531485 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [POI 2008]BLO-Blockade 最终得分 100
用户昵称 Gravatar瑆の時間~無盡輪迴·林蔭 是否通过 通过
代码语言 C++ 运行时间 0.468 s
提交时间 2019-05-14 22:14:11 内存使用 11.49 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#define next NEXT
using namespace std;
long long int dfn[100001];
long long int low[100001];
long long int ans[100001];
long long int head[100001];
long long int next[1000001];
long long int e[1000001];
long long int SIZE[100001];
bool gd[100001];
long long int n,m,cnt=0,a,b,num=0;
void ADD(int a,int b)
{
    e[++cnt]=b;
    next[cnt]=head[a];
    head[a]=cnt;
}
void TARJAN(int x)
{
    dfn[x]=++num;
    low[x]=dfn[x];
    SIZE[x]=1;
    long long int sum=0,flag=0;
    for(int i=head[x];i;i=next[i])
    {
        int y=e[i];
        if(!dfn[y])
        {
            TARJAN(y);
            SIZE[x]+=SIZE[y];
            low[x]=min(low[x],low[y]);
            if(low[y]>=dfn[x])
            {
                sum+=SIZE[y];
                flag++;
                ans[x]+=SIZE[y]*(n-SIZE[y]);
                if(x!=1||flag>1)
                {
                    gd[x]=true; 
                }
            }
        }
        else
        {
            low[x]=min(low[x],dfn[y]);
        }
    }
    if(gd[x]==1)
    {
        ans[x]+=n-1;
        ans[x]+=(sum+1)*(n-sum-1);
    }
    else
    ans[x]=2*(n-1);
}
int LINYIN()
{
	freopen("BLO.in","r",stdin);
	freopen("BLO.out","w",stdout); 
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&a,&b);
        ADD(a,b);
        ADD(b,a);
    }
    TARJAN(1);
    for(int i=1;i<=n;i++)
    {
        printf("%lld\n",ans[i]);
    }
    return 0;
} 
int sed=LINYIN();
int main()
{
	;
}