洛谷 P4306 [JSOI2010]连通数

洛谷传送门

题目描述

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

如图

顶点 11 可达 1,2,3,4,51, 2, 3, 4, 5

顶点 22 可达 2,3,4,~52, 3, 4, 5

顶点 33 可达 3,4,53, 4, 5

顶点 4,~54, 5 都只能到达自身。

所以这张图的连通数为 1414。

给定一张图,请你求出它的连通数

输入格式

输入数据第一行是图顶点的数量,一个正整数N。 接下来N行,每行N个字符。第i行第j列的1表示顶点i到j有边,0则表示无边。

输出格式

输出一行一个整数,表示该图的连通数。

输入输出样例

输入 #1复制

输出 #1复制

说明/提示

对于100%的数据,N不超过2000。

题解:

好不容易碰上一道紫水题

人生中首次自己自主AC紫题,感觉比我国爆破第一颗原子弹还激动...

大家都使用的tarjan缩点、反向建图等正解做法,但是这些复杂图论我不是很会。

我一开始想到的是SPFA,我每个点跑一遍最短路,跑完之后开始从1到n扫,如果dist数组被更新了就说明此点可达,累加ans。

最后直接输出即可

数据还是比较水的,请求洛谷加强数据,我这个算法的时间复杂度奇高,预期TLE5个点,但是竟然AC了...

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int n,ans;
char s[2010];
int tot,to[4000001],nxt[4000001],head[2001];
int dist[2001],v[2001];
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void spfa(int start)
{
for(int i=1;i<=n;i++)
dist[i]=1e9,v[i]=0;
queue<int> q;
q.push(start);
v[start]=1;
dist[start]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
v[x]=0;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(dist[y]>dist[x]+1)
{
dist[y]=dist[x]+1;
if(v[y]==0)
q.push(y),v[y]=1;
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s+1);
for(int j=1;j<=n;j++)
if(s[j]=='1')
add(i,j);
}
for(int i=1;i<=n;i++)
{
spfa(i);
for(int j=1;j<=n;j++)
if(dist[j]<1e9)
ans++;
}
printf("%d",ans);
return 0;
}

JSOI 2010 连通数的更多相关文章

  1. BZOJ 1823 JSOI 2010 盛宴 2-SAT

    标题效果:有着n材料的种类,m陪审团. 每种材料具有两种不同的方法.每个法官都有两个标准.做出来的每一个法官的菜必须至少满足一个需求. 问:是否有这样一个程序. 思考:2-SAT经典的内置图形问题.因 ...

  2. [JSOI 2010] 满汉全席

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1823 [算法] 2-SAT [代码] #include<bits/stdc++ ...

  3. [BZOJ2208][Jsoi2010]连通数 暴力枚举

    Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...

  4. 【BZOJ2208】[Jsoi2010]连通数 DFS

    [BZOJ2208][Jsoi2010]连通数 Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示 ...

  5. [luoguP4306][JSOI2010]连通数

    \[Yeasion\] \[Nein\] 其实我很奇怪为什么我的正解和输出\(N \times N\)的效果是一样的.....嗯,大概是\(RP\)问题吧.... 嗯首先来看一下题目: 题目描述: 度 ...

  6. [bzoj2208][Jsoi2010]连通数_bitset_传递闭包floyd

    连通数 bzoj-2208 Jsoi-2010 题目大意:给定一个n个节点的有向图,问每个节点可以到达的点的个数和. 注释:$1\le n\le 2000$. 想法:网上有好多tarjan+拓扑序dp ...

  7. Luogu P4306 JSOI2010 连通数

    tarjan有向图缩点的基础应用.把原图中某点的连通数转化为反向图中"能够到达某点的个数".缩点后,每个新点的贡献等于 原dcc大小 * f[i] 其中f[i]表示(包括该点自身) ...

  8. 如何使用本地账户"完整"安装 SharePoint Server 2010+解决“New-SPConfigurationDatabase : 无法连接到 SharePoint_Config 的 SQL Server 的数据 库 master。此数据库可能不存在,或当前用户没有连接权限。”

    注:目前看到的解决本地账户完整安装SharePoint Server 2010的解决方案如下,但是,有但是的哦: 当我们选择了"完整"模式安装SharePointServer201 ...

  9. How to accept Track changes in Microsoft Word 2010?

    "Track changes" is wonderful and remarkable tool of Microsoft Word 2010. The feature allow ...

随机推荐

  1. Swagger2边写代码边写文档

    ​ 作为一个开发人员最怕的就是写文档了,但是要想成为一个合格的程序员,写好文档也是一个必备的技能.开发中我们经常要写接口服务,既然是服务就要跟别人对接,那难免要写接口文档,那么如何”优雅“的写接口文档 ...

  2. java知识体系(自我学习中)

    java自我学习知识体系

  3. sublime-text-3-build-3207 破解+注册码

    按照以下步骤依次进行 打开 https://hexed.it/ 单机 "Open file" 并选择 "sublime_text.exe" 可执行文件. 转到 ...

  4. 前端学习:CSS的学习总结(图解)

    前端学习:CSS的学习总结(图解) CSS代码笔记 CSS简介 css的引入方式和书写规范 CSS选择器 CSS属性 CSS盒子模型 CSS的定位

  5. java8时间处理实例

    实例: package com.javaBase.time; import java.time.Clock; import java.time.LocalDate; import java.time. ...

  6. 硬件笔记之制作MacOS Mojave U盘USB启动安装盘方法

    0x00 概述 随着苹果 macOS Mojave 正式版发布,很多使用 Mac 电脑的同学都已升级到最新版了.但如果你对系统有洁癖或原本系统已凌乱不堪,那么可能还是希望能格式化「全新安装 macOS ...

  7. handle句柄

    若是你向我问起 Win32 程序设计中印象最深(最坑爹)的一个概念是什么,那么我会毫不犹豫地告诉你——句柄(Handles).究其原因,无论是 MSDN 还是 维基百科,对于“句柄”这个词的解说都显得 ...

  8. Python - 基础语法 - 第一天

    编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 标识符 第一个字符必须是字母表中字母或下划线 _ . 标识符的其他的部分由字母.数字和下划线 ...

  9. Winform中实现ZedGraph不显示y=0这条刻度线

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  10. Linux操作:使用grep排除搜索的目录

    使用grep时,当一个目录下有一个包含很多文件的目录,但也不想搜索它,怎么办? 使用 --exclude-dir 选项. 单个目录示例: grep -rni 'http' --exclude-dir= ...