题目链接:https://vjudge.net/contest/236513#problem/E
大意:给你n条边的关系,输入的第一个只指向第一个,然后让你判断要想从指定的点到达剩下的所有的点,问你最少需要添加多少条边才符合要求。

思路:首先使用tarjan算法进行染色,缩点。到最后判断 缩减后 入度为零的不含有城市中心的强连通子图的个数就可以了!!!

原因,染完色之后,如果有入度为0的强连通子图,那么这个点就可能符合,然后吧满足这些条件的记录一下。注意,在累加 的时候,不能将入度为0的含有城市中心的强连通子图计算在内,因为这个图中,有城市中心的强连通图中,这个图中的其他所有的点都能由城市中心到达,所以不用累加。

代码如下:

 

 #include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
# define maxn
vector<int >wakaka[maxn];
map<int,int>p;
stack<int>q;
int dfn[maxn],low[maxn],vis[maxn];
int out[maxn],cnt[maxn],color[maxn],in[maxn];
int num,ans;
void tarjan(int u)
{
vis[u]=;
q.push(u);
low[u]=dfn[u]=++num;
int len=wakaka[u].size();
for(int i=; i<len; i++)
{
int v=wakaka[u][i];
if(vis[v]==)
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
if(vis[v]==)
{
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u])
{
ans++;
int top;
do
{
top=q.top();
q.pop();
vis[top]=-;
color[top]=ans;
}
while(top!=u);
}
}
int main()
{
int n,m,t;
while(cin>>n>>m>>t)
{
num=ans=;
memset(vis,,sizeof(vis));
memset(cnt,,sizeof(cnt));
memset(out,,sizeof(out));
memset(in,,sizeof(in));
memset(color,,sizeof(color));
while(!q.empty())q.pop();
for(int i=; i<=n; i++)
{
wakaka[i].clear();
}
p.clear();
for(int i=; i<=m; i++)
{
int u,v;
cin>>u>>v;
p[u]++;
p[v]++;
wakaka[u].push_back(v);
}
for(int i=; i<=n; i++)
{
if(vis[i]==)
tarjan(i);
}
//cout<<color[1]<<endl<<color[2]<<endl;
for(int i=; i<=n; i++)
{
int len=wakaka[i].size();
for(int j=; j<len; j++)
{
if(color[i]!=color[wakaka[i][j]])
{
in[color[i]]++;
out[color[wakaka[i][j]]]++;
}
}
cnt[color[i]]++;
}
int t1=,t2=;
for(int i=; i<=ans; i++)
{
if(in[i]==)
t1++;
if(out[i]==&&i!=color[t])
{
t2++;
}
}
cout<<t2<<endl;
//else {
//cout<<max(t1,t2)<<endl;
//}
//}
}
return ;
}

E - Reachability from the Capital的更多相关文章

  1. E. Reachability from the Capital dfs暴力

    E. Reachability from the Capital 这个题目就是给你一个有向图,给你起点,问增加多少条边让这个图变成一个连通图. 这个因为n只有5000m只有5000 所以可以暴力枚举这 ...

  2. Reachability from the Capital CodeForces - 999E (强连通)

    There are nn cities and mm roads in Berland. Each road connects a pair of cities. The roads in Berla ...

  3. Reachability from the Capital

    题目描述 There are nn cities and mm roads in Berland. Each road connects a pair of cities. The roads in ...

  4. CF999E Reachability from the Capital来自首都的可达性

    题目大意: 有n个节点m条边,边都是单向的,请你添加最少的边使得起点s到其他与其他每一个点之间都能互相到达 这题一看就是一个缩点啊 其实对于原有的m条边相连的一些点,如果之前他们已经形成了强连通分量( ...

  5. Reachability from the Capital CodeForces - 999E(强连通分量 缩点 入度为0的点)

    题意: 问至少加几条边 能使点s可以到达所有的点 解析: 无向图的连通分量意义就是  在这个连通分量里 没两个点之间至少有一条可以相互到达的路径 所以 我们符合这种关系的点放在一起, 由s向这些点的任 ...

  6. Reachability from the Capital(Codeforces Round #490 (Div. 3)+tarjan有向图缩点)

    题目链接:http://codeforces.com/contest/999/problem/E 题目: 题意:给你n个城市,m条单向边,问你需要加多少条边才能使得从首都s出发能到达任意一个城市. 思 ...

  7. [CF999E]Reachability from the Capital

    题目大意:有一个$n$个点$m$条边的有向图,起点$S$,要求你添加最少的边使得$S$可以到达所有点 题解:缩点,答案就是没有入边的强连通分量个数,注意,如果起点$S$所在的强连通块没有入边则不计入答 ...

  8. E. Reachability from the Capital(tarjan+dfs)

    求联通分量个数,在dfs一次 #include <iostream> #include <algorithm> #include <cstring> #includ ...

  9. codeforces#999 E. Reachability from the Capital(图论加边)

    题目链接: https://codeforces.com/contest/999/problem/E 题意: 在有向图中加边,让$S$点可以到达所有点 数据范围: $ 1 \leq n \leq 50 ...

随机推荐

  1. 千人基因组(1000 Genomes)提取群体(population)或者样本(sample ID)信息

    进入链接:http://www.internationalgenome.org/data-portal/sample 点击“filter by population”,在弹出的选择框里,选择想要下载的 ...

  2. java利用线程池处理集合

    java利用线程池处理集合 2018年07月23日 17:21:19 衍夏成歌 阅读数:866   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/s ...

  3. Educational Codeforces Round 53 (Rated for Div. 2) A Diverse Substring

    传送门 https://www.cnblogs.com/violet-acmer/p/10163375.html 题意: 给出串是多态的定义“长度为 n 的串 s ,当串 s 中所有字母出现的次数严格 ...

  4. (Set){A} + {B} hdu1412

    {A} + {B} 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1412   Problem Description 给你两个集合,要求{A} + {B} ...

  5. bind,apply,call,caller,callee还傻傻分不清楚?

    先介绍每个的语法: 1. bind() 语法:fn.bind(thisObj[, arg1[, arg2[, ...]]]) fn:是想要改变this指向的函数 thisObj:表示fn中this指针 ...

  6. mysql写shell小技巧

    set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...

  7. 正态分布-python建模

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  8. Hbase balancer RSgroup shell 脚本

    #!/bin/bashTMP_FILE=tmp_groupsGROUPS_FILE=groups.txtecho "list_groups" | hbase shell > ...

  9. 面向对象【day07】:知识点回顾(十一)

    本节内容 1.self关键字 2.封装 3.继承 4.静态方法 一.self关键字 作用:调用当前方法的对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Foo:   ...

  10. centos下问题:connect:network is unreachable

    问题描述 弄了三台机器准备搭建一个集群,按照centos7系统,一台主节点安装桌面环境,两台计算节点.配置计算节点的时候,发现ping不通,出现connect:network is unreachab ...