题目描述

在美丽的比特镇一共有$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\rightarrow 2\rightarrow 3\rightarrow 4$,$4\rightarrow 3\rightarrow 2\rightarrow 1$,
$2\rightarrow 3\rightarrow 4\rightarrow 1$,$1\rightarrow 4\rightarrow 3\rightarrow 2$,
$3\rightarrow 4\rightarrow 1\rightarrow 2$,$2\rightarrow 1\rightarrow 4\rightarrow 3$,
$4\rightarrow 1\rightarrow 2\rightarrow 3$,$3\rightarrow 2\rightarrow 1\rightarrow 4$。

数据范围:


题解

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

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

考虑接着优化,因为经过$b\rightarrow 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++

[CSP-S模拟测试]:Tourist Attractions(简单图论+bitset)的更多相关文章

  1. 模拟测试—moq:简单一两句

    在Xunit的基础上,说话模拟测试. 假如我们有这样一个控制器里面有这样一个方法,如图 我们在对Bar测试得时候,如果测试未通过,错误有可能来至于Bar,也有可能错误来至于serverde Foo方法 ...

  2. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  3. [CSP-S模拟测试]:电压机制(图论+树上差分)

    题目描述 科学家在“无限神机”($Infinity\ Machine$)找到一个奇怪的机制,这个机制有$N$个元件,有$M$条电线连接这些元件,所有元件都是连通的.两个元件之间可能有多条电线连接.科学 ...

  4. [CSP-S模拟测试]:木叶下(图论)

    题目传送门(内部题77) 输入格式 第一行一个整数$n$,表示原先的树的点数接下来$n-1$行每行两个整数$a,b$,表示原先的树上的$n-1$条边,保证这$n-1$条边形成一棵树. 接下来一行一个整 ...

  5. 联赛模拟测试17 A. 简单的区间 启发式合并

    题目描述 分析 我们要找的是一段区间的和减去该区间的最大值能否被 \(k\) 整除 那么对于一段区间,我们可以先找出区间中的最大值 然后枚举最大值左边的后缀与最大值右边的前缀之和是否能被 \(k\) ...

  6. 联赛模拟测试22 D. 简单计算

    题目描述 分析 \(\sum_{i=0}^p[(p|qi)?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|qi/gcd(p,q))?0:1]=\sum_{i=0}^p[(p/gcd(p, ...

  7. 比特镇旅游(Tourist Attractions)【暴力+Bitset 附Bitset用法】

    Online Judge:NOIP2016十连测第一场 T2 Label:暴力,Bitset 题目描述 在美丽的比特镇一共有n个景区,编号依次为1到n,它们之间通过若干条双向道路连接. Byteasa ...

  8. csp-s模拟48,49 Tourist Attractions,养花,画作题解

    题面:https://www.cnblogs.com/Juve/articles/11569010.html Tourist Attractions: 暴力当然是dfs四层 优化一下,固定两个点,答案 ...

  9. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

随机推荐

  1. mysql定时备份shell脚本

    #!/bin/bash #每天早上4点, mysql备份数据 # backup.sh #crontab -e # * * * /home/erya/run/moniter/mysql_backup.s ...

  2. Java Web项目启动执行顺序

    一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个Serv ...

  3. GARENA笔试sql20190926

    create database garena; use garena; create table players( account_id int, name varchar(20), country ...

  4. python的前景

    最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Python的整体语言难度来讲又比Java简单的很多.尤其是在运维的应用 ...

  5. LCT题单(自己的做题情况反馈)(转自Flash)

    LCT题单(自己的做题情况反馈)(转自Flash) 随时进Flash Hu的LCT看一发 也可以看一下我自己的风格的板子 开始 维护链信息(LCT上的平衡树操作) [X] 洛谷P3690 [模板]Li ...

  6. 21、numpy—Matplotlib

    NumPy Matplotlib Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案. 它也可以和图形工具包一起使用,如 P ...

  7. python爬取企业登记业务

    import requests from lxml import etree import csv for i in range(10, 990, 10): url = "http://12 ...

  8. jsp页面必填项如何加红星号*

    1.加*号 并且设置*号大小 <span style="color:red; font-size: 20px">*</span>

  9. 续上文,中的\\u00a0是怎么解释出来的

    public String utf8ToUnicode(String inStr) { char[] myBuffer = inStr.toCharArray(); StringBuffer sb = ...

  10. Sass函数:random()函数

    random() 函数是用来获取一个随机数 >> random() 0.03886 >> random() 0.66527 >> random() 0.8125 & ...