题目描述

在美丽的比特镇一共有$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. MapReduce(3): Partitioner, Combiner and Shuffling

    Partitioner: Partitioning and Combining take place between Map and Reduce phases. It is to club the ...

  2. 应用安全 - Web安全 - 文件包含攻防

    LFI - 无限制本地文件包含 通过目录遍历漏洞可以获取到系统中其他文件的内容 常见的敏感信息路径 Windows系统 c:\boot.ini // 查看系统版本 c:\windows\system3 ...

  3. CSU 1092 Barricade

    1092: Barricade Time Limit: 1 Sec  Memory Limit: 32 MBSubmit: 240  Solved: 71[Submit][Status][Web Bo ...

  4. 2018-2-13-win10-uwp-BadgeLogo-颜色

    title author date CreateTime categories win10 uwp BadgeLogo 颜色 lindexi 2018-2-13 17:23:3 +0800 2018- ...

  5. openstack stein部署手册 1. 准备

    # 控制节点与计算节点,分别指定静态解析 /etc/hosts 192.168.123.201 controller 192.168.123.202 compute01 # 控制节点与计算节点,分别安 ...

  6. 脚本_根据 md5 校验码,检测文件是否被修改

    #!bin/bash#功能:根据 md5 校验码,检测文件是否被修改#作者:liusingbon#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文 ...

  7. java 指定日期后n天

    RT 算时间本来就是我的弱项:不废话了,贴代码 想传什么参数自己在改改就ok,传入String,放回String public class Text { public static void main ...

  8. Codeforces Round #420 (Div. 2) - C

    题目链接:http://codeforces.com/contest/821/problem/C 题意:起初有一个栈,给定2*n个命令,其中n个命令是往栈加入元素,另外n个命令是从栈中取出元素.你可以 ...

  9. Java并发(基础知识)—— Java中断机制

    上文讲解了Java线程的创建.启动以及停止,在讲到停止线程时说到了Java中断,Java中断是停止线程的一种协作机制,本文打算对Java中断机制进行详细讲解. 在网上搜索Java中断机制,发现两篇好文 ...

  10. 《程序员的呐喊》:一个熟悉多种语言的老程序员对编程语言、开发流程、google的战略等的思考,比较有趣。 五星推荐

    作者熟悉二三十种编程语言,写了20多年代码.本书是作者对编程语言.开发流程.google的战略等的思考.比较有趣. 前面部分是作者对编程语言的一些思考.作者鄙视C++, Java,面向对象.比较有趣的 ...