问题转换成缩点求度数为0的点的个数,s点所在联通块作额外处理

缩点写的很烂调了一早上。。

#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 5005
vector<int>G[maxn]; int n,m,s; int low[maxn],dfn[maxn],ind,stk[maxn],top,ins[maxn],c[maxn],cnt;
void Tarjan(int x){
dfn[x]=low[x]=++ind;
stk[++top]=x;ins[x]=;
for(int i=;i<G[x].size();i++){
int y=G[x][i];
if(!dfn[y]){
Tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(ins[y])
low[x]=min(low[x],low[y]);
}
if(low[x]==dfn[x]){
cnt++;int y;
do{
y=stk[top--];
ins[y]=;
c[y]=cnt;
}while(x!=y);
}
} int main(){
cin>>n>>m>>s;
for(int i=;i<=m;i++){
int u,v;
cin>>u>>v;
G[u].push_back(v);
}
for(int i=;i<=n;i++)
if(!dfn[i])
Tarjan(i); //缩点重建
int in[maxn]={};
in[c[s]]++; for(int u=;u<=n;u++){
for(int i=;i<G[u].size();i++)
if(c[u]!=c[G[u][i]])
in[c[G[u][i]]]++;
}
int ans=;
for(int i=;i<=cnt;i++)
if(in[i]==)ans++;
cout<<ans<<'\n';
}

强连通图缩点——cf999E的更多相关文章

  1. Strongly connected HDU - 4635(判断强连通图 缩点)

    找出强联通块,计算每个连通块内的点数.将点数最少的那个连通块单独拿出来,其余的连通块合并成一个连通分量. 那么假设第一个连通块的 点数是 x  第二个连通块的点数是 y 一个强连通图(每两个点之间,至 ...

  2. BNU 20860——Forwarding Emails——————【强连通图缩点+记忆化搜索】

    Forwarding Emails Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...

  3. poj 1236强连通图缩点

    题目链接:http://poj.org/problem?id=1236 #include <cstdio> #include <cmath> #include <algo ...

  4. Tarjan求缩点化强连通图

    Describe: 求一个有向图加多少条边可以变成一个强连通图 Solution: Tarjan缩点染色后,判断出度和入度,所有点的出度 = 0 的和 和 入度 = 0 的和的最大值即为所求. 缩点染 ...

  5. POJ1236Network of Schools[强连通分量|缩点]

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16571   Accepted: 65 ...

  6. hdu1269迷宫城堡(判断有向图是否是一个强连通图)

    1 /* 题意: 给你一个图,求这个有向图示否是一个强连通图(每两个节点都是可以相互到达的)! 思路1:按正向边dfs一遍,将经过的节点计数,如果记录的节点的个数小于n,那么就说明图按照正向边就不是连 ...

  7. hdu 4635 Strongly connected 强连通缩点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给你一个n个点m条边的图,问在图不是强连通图的情况下,最多可以向图中添多少条边,若图为原来 ...

  8. [bzoj1051] [HAOI2006]受欢迎的牛 (Tarjan+缩点)

    强连通图,缩点 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受 ...

  9. poj 2553 The Bottom of a Graph(强连通分量+缩点)

    题目地址:http://poj.org/problem?id=2553 The Bottom of a Graph Time Limit: 3000MS   Memory Limit: 65536K ...

随机推荐

  1. Object相关方法

    const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.values(object1)); // expect ...

  2. ida 符号路径设置

    cfg/pdf.cfg 文件中主要有两个字段 PDBSYM_DOWNLOAD_PATH 这个字段可以注释掉 PDBSYM_SYMPATH 这个字段需要设置一个符号路径,具体设置方法和WinDBG的设置 ...

  3. 初识 flex 布局

    开启弹性盒模式:   display:flex / inline-flex:   inline-flex  行内弹性盒 1.设置 flex 缩放的 限定值 min-width 最小值   min-wi ...

  4. jq-demo-点击改变图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Java中的接口是怎么实现的

    接口 使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体. interface  Printable { final int MAX = 100; void add( ...

  6. c++ TCP 获取客户端IP

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #i ...

  7. SQL优化之慢查询和explain以及性能分析

    性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 使用explain去查看该sql的执行计划 使用show profile去查看该sql执行时的性能问题 MySQL性能优化 ...

  8. Go 逻辑运算符

    Go 逻辑运算符 package main import "fmt" func main() { var a bool = true var b bool = false if ( ...

  9. PHP headers_list() 函数

    定义和用法 headers_list() 函数返回已发送的(或待发送的)响应头部的一个列表. 该函数返回包含报头的数组. 语法 headers_list() 提示和注释 提示:如需确定是否已发送报头, ...

  10. bzoj1051题解

    [题意分析] 给你一张有向图,求有多少个点,满足以其他任意一点为起点都能到达该点. [解题思路] 如果这张有向图不连通,则一定没有点能被其他所有点到达,答案为0. 然后先用tarjan缩一波强连通分量 ...