首页 > 其他分享 >SPOJ-GRAFFDEF King Graffs Defense

SPOJ-GRAFFDEF King Graffs Defense

时间:2022-08-31 17:11:55浏览次数:79  
标签:King int siz SPOJ Defense maxn low nex now

King Graffs Defense

tarjan 割边

显然如果是割边的话,边两边的边双连通分量就不能连通

因此考虑 \(dfs\) 搜索树中,计算出所有边双连通分量的大小,然后每个边双连通分量与其他点的乘积之和,就是所有答案情况的 \(\frac{1}{2}\)

总情况数就是 \(\frac{n*(n-1)}{2}\)

记得防止溢出,以及根所在的边双较为特殊,我的代码是没法直接计算他与其他的点的乘积,因此要单独判断加上去

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 1e5 + 10;
typedef long long ll;
int head[maxn], nexx[maxn * 10], to[maxn * 10], vp = 1;
ll siz[maxn], cnt[maxn];
int dfn[maxn], low[maxn], tp = 0;
int n, m;

inline void add(int u, int v)
{
    vp++;
    nexx[vp] = head[u];
    to[vp] = v;
    head[u] = vp;
}

void tarjan(int now, int pre)
{
    dfn[now] = low[now] = ++tp;
    siz[now] = 1;
    for(int i=head[now]; i; i=nexx[i])
    {
        int nex = to[i];
        if(dfn[nex] == 0)
        {
            tarjan(nex, i);
            low[now] = min(low[nex], low[now]);
            if(low[nex] > dfn[now])
                cnt[now] += siz[nex] * (n - siz[nex]);
            else
                siz[now] += siz[nex];
        }
        else if(i != (pre ^ 1))
            low[now] = min(low[now], dfn[nex]);
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    for(int i=0; i<m; i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        add(a, b);
        add(b, a);
    }
    ll tot = (ll)n * (n - 1) / 2;
    ll sum = 0;
    tarjan(1, -1);
    if(cnt[1] != n) sum += siz[1] * (n - siz[1]);
    for(int i=1; i<=n; i++) sum += cnt[i];
    sum /= 2;
    double ans = (double)sum / tot;
    printf("%.5f\n", ans);
    return 0;
}

标签:King,int,siz,SPOJ,Defense,maxn,low,nex,now
From: https://www.cnblogs.com/dgsvygd/p/16643762.html

相关文章

  • 应用性能监控:SkyWalking
    目录SkyWalking简介SkyWalking搭建平台后端(Backend)平台前端(UI)JavaAgent(Java应用监控)JavaAgent下载Java演练项目SkyWalking监控SkyWalking简介SkyWalking是一......
  • CCPC Qinhuangdao 2020 K, Kingdom's Power做题思路
    首先,对于一个子树,我们显然只有两种去让军队走过他的办法,一种是从兄弟节点调一些军队来,另一种是从根节点推过来。感觉有一个结论,就是我这个位置如果用兄弟节点推过来的只是......
  • CF992E Nastya and King-Shamans
    CF992ENastyaandKing-Shamans题目大意给定一个序列\(a_i\),记其前缀和序列为\(s_i\),有\(q\)个询问,每次单点修改,询问是否存在一个\(i\)满足\(a_i=s_{i-1}\),有......
  • scan chain masking in the compactor
    1.X-blocking 使用EDTcompactor压缩scanchain会导致X-blocking,compactor会将scanchain的observe值做异或运算,两条chain中的任意一条为X,edtchanneloutput都会......
  • tomcat实现链路追踪-skywalking
    下载软件包wgethttps://archive.apache.org/dist/tomcat/tomcat-8/v8.5.82/bin/apache-tomcat-8.5.82.tar.gzwgethttps://download.oracle.com/java/18/latest/jdk-18_......
  • halo博客实现链路追踪案例-skywalking
    es10.0.0.17skywalking10.0.0.2halo10.0.0.14先部署一个halo博客安装jdkyuminstalljava-11-openjdk-y下载halo博客jar包和skywalking-java-agent包wgethttp......
  • skywalking部署
    ES:2核4G10.0.0.16Skywalking:2核8G 10.0.0.12安装jdk#wgethttps://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.rpm#rpm-ivhjdk-18_linux-x64_bi......
  • KingbaseES例程之快速删除表数据
    概述快速删除表中的数据delete语句删除数据表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放。这种删除缺点是:删除效率比较低。这种删除优点是:支持......
  • KingbaseESV8R6临时表和全局临时表
    临时表概述临时表用于存放只存在于事务或会话期间的数据。临时表中的数据对会话是私有的,每个会话只能看到和修改自己会话的数据。您可以创建全局(global)临时表或本地(local......
  • KingbaseES V8R3集群运维案例之---用户自定义表空间管理
    ​案例说明:KingbaseES数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外。本案例复现了,当用户自定义表空间存储路径配置到data下......