【题意分析】

  给你一张有向图,求有多少个点,满足以其他任意一点为起点都能到达该点。

【解题思路】

  如果这张有向图不连通,则一定没有点能被其他所有点到达,答案为0。

  然后先用tarjan缩一波强连通分量,因为每个强连通分量中任意两点能相互到达,所以整体可以看成一个点。

  因为已经保证图的连通性,所以只要统计没有入度的强连通分量的点数和即可。复杂度O(n+m)。

【参考代码】

 #include <cctype>
#include <cstdio>
#define REP(I,start,end) for(int I=(start);I<=(end);I++)
#define PER(I,start,end) for(int I=(start);I>=(end);I--)
typedef long long LL;
inline int getint()
{
char ch=getchar();
for(;!isdigit(ch)&&ch!='-';ch=getchar());
bool impositive=ch=='-';
if(impositive)
ch=getchar();
int result=;
for(;isdigit(ch);ch=getchar())
result=(result<<)+(result<<)+ch-'';
return impositive?-result:result;
}
inline LL getLL()
{
char ch=getchar();
for(;!isdigit(ch)&&ch!='-';ch=getchar());
bool impositive=ch=='-';
if(impositive)
ch=getchar();
LL result=0ll;
for(;isdigit(ch);ch=getchar())
result=(result<<)+(result<<)+ch-'';
return impositive?-result:result;
}
template<typename T> inline bool getmax(T &target,T pattern)
{
return pattern>target?target=pattern,true:false;
}
template<typename T> inline bool getmin(T &target,T pattern)
{
return pattern<target?target=pattern,true:false;
}
//Header Template
#include <cstring>
#include <vector>
using namespace std;
bool instack[],visited[],ind[];
int n,cardP,top,cnt,dfn[],low[],SCC[],Ssize[],stack[];
vector<int> edge[],dedge[];
inline bool BFS()
{
memset(visited,,sizeof(visited));
stack[]=visited[]=;
for(int head=,tail=;head++<tail;)
{
int now=stack[head];
for(int i=;i<dedge[now].size();i++)
{
int p=dedge[now][i];
if(!visited[p])
{
stack[++tail]=p;
visited[p]=true;
}
}
}
bool result=true;
REP(i,,n)
result&=visited[i];
return result;
}
void Tarjan(int now)
{
dfn[now]=low[now]=++cardP;
stack[++top]=now;
instack[now]=visited[now]=true;
for(int i=;i<edge[now].size();i++)
{
int p=edge[now][i];
if(!visited[p])
{
Tarjan(p);
getmin(low[now],low[p]);
}
else
if(instack[p])
getmin(low[now],dfn[p]);
}
if(low[now]==dfn[now])
{
Ssize[++cnt]=;
while(top&&instack[now])
{
int p=stack[top--];
instack[p]=false;
SCC[p]=cnt;
Ssize[cnt]++;
}
}
}
int main()
{
n=getint();
memset(edge,,sizeof(edge));
memset(dedge,,sizeof(dedge));
for(int m=getint();m--;)
{
int u=getint(),v=getint();
edge[v].push_back(u);
dedge[u].push_back(v);
dedge[v].push_back(u);
}
if(!BFS())
{
putchar('');
putchar('\n');
return ;
}
cardP=top=cnt=;
memset(visited,,sizeof(visited));
memset(instack,,sizeof(instack));
REP(i,,n)
if(!visited[i])
Tarjan(i);
memset(ind,,sizeof(ind));
REP(i,,n)
for(int k=;k<edge[i].size();k++)
{
int j=edge[i][k],scc=SCC[j];
ind[scc]|=SCC[i]!=scc;
}
int ans=;
REP(i,,cnt)
ans+=(!ind[i])*Ssize[i];
printf("%d\n",ans);
return ;
}

bzoj1051题解的更多相关文章

  1. BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...

  2. 【BZOJ1051】[HAOI2006]受欢迎的牛

    [BZOJ1051][HAOI2006]受欢迎的牛 题面 bzoj 洛谷 题解 假如\(A\)喜欢\(B\)就连一条\(A\)到\(B\)的边 然后缩点,如果图不连通就\(Impossible\) 否 ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. application/x-www-form-urlencode/multipart/form-data

    首先我们先认识下今天的application/x-www-form-urlencode/multipart/form-data属性所在的位置 1.form所属 在Form元素的语法中,EncType表 ...

  2. bootstrap相关使用

    如果想做成响应式效果,使用栅格系统产生 小于768手机端 : col-xs- 大于768小于992平板 : col-sm- 大于992小于1200 : col-md- 大于1200 : col-lg- ...

  3. web自动化框架抽取示例【Java+selenium】

    web自动化测试框架抽取示例 例子:测试登录模块,对登录的账号和密码进行不同的case校验. 1.1.1 无优化代码login_1 package com.lee.auto.testFrome; im ...

  4. PHP FILTER_SANITIZE_URL 过滤器

    定义和用法 FILTER_SANITIZE_URL 过滤器删除字符串中所有非法的 URL 字符. 该过滤器允许所有的字母.数字以及 $-_.+!*'(),{}|\^~[]`">< ...

  5. SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

  6. 剑指offer——二进制中1的个数(c++)

    题目描述实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,则输出为2 常规解法首先把n和1做位运算,判断n的最低位是不是1,然后把1左移一位得到2,再把n和2 ...

  7. nginx502问题

    常见的502错误1.配置错误因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port 2.资源耗尽lnmp架构在处 ...

  8. MySQL 建库建表规范

    1.约束 1.PrimaryKey(PK)主键 特点:唯一 + 非空,一张表中只能有一个主键约束,一般是一个数字列,最好是无意义的. 2.NOT NULL 非空 特点:不能为空,建议在MySQL中,业 ...

  9. 条件sql ibatis

    <!-- 多条件查询 --><select id="MS-CUSTOM-PANDECT-INFO-BY-CONDITIONS" resultMap="R ...

  10. Bootstrap入门及其常用内置实现

    BootStrap是一个专门做页面的 1.BS是基于HTML CSS JS 的一个前端框架(半成品) 2.预定义了一套CSS样式与JQurey实现 3.BS和Validation类似,都是JQ的插件, ...