AC日记——[POI2008]BLO-Blockade 洛谷 [POI2008]BLO-Blockade

Posted Only U - IU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC日记——[POI2008]BLO-Blockade 洛谷 [POI2008]BLO-Blockade相关的知识,希望对你有一定的参考价值。

[POI2008]BLO-Blockade

 

思路:

  tarjan;

 

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 100005
#define maxm 500005
#define ll long long
ll Count[maxn],E[maxm<<1],V[maxm<<1],head[maxn],cnt;
ll size[maxm],dfn[maxn],n,m,tot,low[maxn];
inline void in(ll &now)
{
    char Cget=getchar();now=0;
    while(Cget>9||Cget<0)Cget=getchar();
    while(Cget>=0&&Cget<=9)
    {
        now=now*10+Cget-0;
        Cget=getchar();
    }
}
void tarjan(ll now)
{
    ll tmp=0;
    size[now]=1,dfn[now]=low[now]=++tot;
    for(ll i=head[now];i;i=E[i])
    {
        if(dfn[V[i]]) low[now]=min(low[now],dfn[V[i]]);
        else
        {
            tarjan(V[i]),size[now]+=size[V[i]],low[now]=min(low[now],low[V[i]]);
            if(dfn[now]<=low[V[i]])Count[now]+=tmp*size[V[i]],tmp+=size[V[i]];
        }
    }
    Count[now]+=tmp*(n-tmp-1);
}
int main()
{
    in(n),in(m);ll u,v;
    while(m--)
    {
        in(u),in(v);
        E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
        E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
    }
    tarjan(1);
    for(ll i=1;i<=n;i++) printf("%lld\n",(Count[i]+n-1)<<1);
    return 0;
}

 

以上是关于AC日记——[POI2008]BLO-Blockade 洛谷 [POI2008]BLO-Blockade的主要内容,如果未能解决你的问题,请参考以下文章

AC日记——[HNOI2008]玩具装箱toy bzoj 1010

AC日记——[SCOI2008] 着色方案 bzoj 1079

AC日记——[HNOI2008]GT考试 bzoj 1009

AC日记——[SHOI2008]小约翰的游戏John bzoj 1022

AC日记——[HNOI2008]水平可见直线 bzoj 1007

AC日记——最大数 洛谷 P1198 [JSOI2008]