• [CSP-S模拟测试]:Tourist Attractions(简单图论+bitset)


    题目描述

    在美丽的比特镇一共有$n$个景区,编号依次为$1$到$n$,它们之间通过若干条双向道路连接。
    $Byteasar$慕名来到了比特镇旅游,不过由于昂贵的门票费,他只能负担起$4$个景区的门票费。他可以在任意景区开始游览,然后结束在任意景区。
    $Byteasar$的旅游习惯比较特殊,一旦他路过了一个景区,他就一定会进去参观,并且他永远不会参观同一个景区两次。所以他想知道,有多少种可行的旅游路线,使得他可以恰好参观$4$个景区呢?即,有多少条简单路径恰好经过了$4$个点。


    输入格式

    第一行包含两个整数$n$,表示景区的总数。
    第$2$至第$n+1$行,每行一个长度为$n$的$01$字符串,第$i+1$行第$j$个字符为$0$表示$i$和$j$之间没有道路,为$1$表示有一条道路。
    输入数据保证$(i,j)$的连接情况等于$(j,i)$的连接情况,且$(i,i)$恒为$0$。


    输出格式

    输出一行一个整数,即可行的路线总数。


    样例

    样例输入:

    4
    0101
    1010
    0101
    1010

    样例输出:

    8


    数据范围与提示

    样例解释:

    $8$条路线分别为:
    $1 ightarrow 2 ightarrow 3 ightarrow 4$,$4 ightarrow 3 ightarrow 2 ightarrow 1$,
    $2 ightarrow 3 ightarrow 4 ightarrow 1$,$1 ightarrow 4 ightarrow 3 ightarrow 2$,
    $3 ightarrow 4 ightarrow 1 ightarrow 2$,$2 ightarrow 1 ightarrow 4 ightarrow 3$,
    $4 ightarrow 1 ightarrow 2 ightarrow 3$,$3 ightarrow 2 ightarrow 1 ightarrow 4$。

    数据范围:


    题解

    $Theta(n^4)$搜索肯定死,我们考虑如何优化。

    假设路径是$a ightarrow b ightarrow c ightarrow d$,那么我们可以考虑枚举边$b ightarrow c$,然后看有多少可行的$a,b$,所以边$b ightarrow c$对答案的贡献即为$({deg}_b-1) imes ({deg}_c-1)-$经过$b ightarrow c$这条边的三元环个数,这样我们就成功的优化到了$Theta(n^3)$。

    考虑接着优化,因为经过$b ightarrow c$这条边的三元环个数就是跟$b,c$两个点都有连边的点的个数,所以我们可以用$bitset$优化,这样就拿到满分了。

    时间复杂度:$Theta(frac{n^3}{k})$($k$根据评测机配置不同略有不同,大多情况下是$32$)。

    期望得分:$100$分。

    实际得分:$100$分。


    代码时刻

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    char ch[1501];
    int du[1501];
    bitset<1500> bit[1501];
    bool Map[1501][1501];
    long long ans;
    int main()
    {
    	int n;scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%s",ch+1);
    		for(int j=1;j<=n;j++)
    			if(ch[j]-'0')
    				du[i]+=(bit[i][j]=Map[i][j]=1);
    	}
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			ans+=Map[i][j]*((du[i]-1)*(du[j]-1)-(bit[i]&bit[j]).count());
    	printf("%lld",ans);
    	return 0;
    }
     

    rp++

  • 相关阅读:
    初学OptaPlanner-01- 什么是OptaPlanner?
    初学推荐系统-05-Wide&Deep [附tensorflow的WideDeepModel代码简单实践]
    初学推荐系统-04-FM (因子分解机:多特征的二阶特征交叉)
    初学推荐系统-03- 隐语义模型与矩阵分解
    初学推荐系统-02-协同过滤 (UserCF & ItermCF) -附简单示例和优缺点分析
    [Datawhale 10月] 初学推荐系统-01-概述
    TiDB-BR数据备份和恢复工具
    Oracle-估算运行时间长的耗时操作语句
    Hadoop、Spark——完全分布式HA集群搭建
    Hadoop——集群参数配置详解
  • 原文地址:https://www.cnblogs.com/wzc521/p/11574432.html
Copyright © 2020-2023  润新知