• BZOJ2208 [Jsoi2010]连通数


    题目描述:

    度量一个有向图连通情况的一个指标是连通,指途中可达点对的个数。

    下图的连通数是14

    现在要你求出连通数

    n<=2000

    题解:

    网上的题解有的写得很复杂,但是看到n的范围这么小,当然会想到搜索算法。

    所以考虑用bfs。

    直接暴力地搜出每个点的连通数,最后统计一下答案即可。

    注意不要忘了加上自己。

    附上代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    using namespace std;
    int n,a[2001][2001],top1,cnt[2001],top2;
    long long ans;
    char s[2001];
    bool vis[2001];
    void bfs(int p)
    {
        queue <int> q ;
        memset(vis,0,sizeof(vis)) ;
        q.push(p) ;
        vis[p]=1 ;
        while(!q.empty())
        {
            int x=q.front();
            q.pop() ;
            for (int i=1;i<=cnt[x];i++)
            if (!vis[a[x][i]])
            {
                ans++ ;
                vis[a[x][i]]=1 ;
                q.push(a[x][i]) ;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%s",s);
            int p=strlen(s);
            for(int j=0;j<p;j++)
                if(s[j]=='1')
                {
                    cnt[i]++;
                    a[i][cnt[i]]=j+1;
                }
        }
        for(int i=1;i<=n;i++)
            bfs(i);
        printf("%lld",ans+n);
    }

    另外此题的做法有:

    做法1:tarjan缩点+拓扑

    做法2:floyd传递闭包

    做法3:暴力dfs

  • 相关阅读:
    目前流行的缺陷管理工具
    高性能WEB开发之Web性能测试工具推荐
    测试工具
    简单的事件示例代码
    C#常用代码片段备忘
    C# 获取变量或对象的栈与堆地址
    C#常用的命名规则汇总
    C# 成员默认访问权限(public、private、protected、internal)
    C# 学习路线
    简单的异常例子
  • 原文地址:https://www.cnblogs.com/jiangminghong/p/9817093.html
Copyright © 2020-2023  润新知