Wannafly挑战赛14 C.可达性(tarjan缩点)
题目描述
输出一个尽可能小的点集,使得从这些点出发能够到达任意一点,如果有多个这样的集合,输出这些集合升序排序后字典序最小的。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
vector<int>G[N],id[N]; int low[N],dfn[N],instack[N],st[N],tot,cnt,scc,p;
int belong[N],in[N];
void tarjan(int u)
{
int v;
low[u]=dfn[u]=++tot;//时间戳
st[++cnt]=u;//入栈
instack[u]=;
for(int i=;i<G[u].size();i++)
{
v=G[u][i];
if(!dfn[v])//是否已经访问
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(instack[v])//已经访问过并且在栈里
{
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u])
{
scc++;//强连通
do{
v=st[cnt--];//出栈
instack[v]=;//v出栈后
belong[v]=scc;//v属于哪个强连通1-scc
id[scc].push_back(v);//当前强连通的子集
}while(u!=v);
}
}
int main()
{
int n,m,u[N],v[N];
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&u[i],&v[i]);
G[u[i]].push_back(v[i]);
}
for(int i=;i<=n;i++)//求所有强连通
if(!dfn[i])//是否已经访问过
tarjan(i);
for(int i=;i<=m;i++)//缩点
{
if(belong[u[i]]==belong[v[i]])continue;
in[belong[v[i]]]++;
}
for(int i=;i<=scc;i++)
sort(id[i].begin(),id[i].end());
vector<int> res;
for(int i=;i<=scc;i++)
if(!in[i])
res.push_back(id[i][]);
printf("%d\n%d",res.size(),res[]);
for(int i=;i<res.size();i++)
printf(" %d",res[i]);
return ;
}
Wannafly挑战赛14 C.可达性(tarjan缩点)的更多相关文章
- 牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树)
牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树) 链接:https://ac.nowcoder.com/acm/problem/15706 现在需要您来帮忙维护这个名册, ...
- wannafly挑战赛14
第一次打wannafly..觉得自己好菜啊... 题目描述 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥. 整天与整数打交道的小明 ...
- Wannafly挑战赛14 - E 并查集维护线性基区间
给一个1-base数组{a},有N次操作,每次操作会使一个位置无效.一个区间的权值定义为这个区间里选出一些数的异或和的最大值.求在每次操作前,所有不包含无效位置的区间的权值的最大值. 线性基删除不知道 ...
- 【HDOJ3861】【Tarjan缩点+最小路径覆盖】
http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King’s Problem Time Limit: 2000/1000 MS (Java/Oth ...
- 【HDOJ2767】【Tarjan缩点】
http://acm.hdu.edu.cn/showproblem.php?pid=2767 Proving Equivalences Time Limit: 4000/2000 MS (Java/O ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- 【模拟7.16】通讯(tarjan缩点加拓扑排序)
这题确实水,纯板子,考试意外出错,只拿了暴力分QAQ tarjan缩点加上拓扑排序,注意这里求最短路径时不能用最小生成树 因为是单向边,不然就可能不是一个联通图了.... 1 #include< ...
- 洛谷P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G (tarjan缩点)
在本题中很明显,给你一个有向图,要用tarjan缩点. 缩点后,一头牛要受到所有牛的欢迎,那么该点的出度要为0,这是容易证明的:如果该点还有出度,比如a连向b,那么a不受到b的欢迎.所以我们要找出度为 ...
- hihoCoder 1185 连通性·三(Tarjan缩点+暴力DFS)
#1185 : 连通性·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 暑假到了!!小Hi和小Ho为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...
随机推荐
- java-部分精选面试题
JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Clas ...
- Unable to locate Spring NamespaceHandler for XML schema namespace
1. 问题 本文将讨论Spring中最常见的配置问题 —— Spring的一个命名空间的名称空间处理程序没有找到. 大多数情况下,是由于一个特定的Spring的jar没有配置在classpath下,让 ...
- 删除oracle数据库用户
手工删除ORACLE数据库用户时常会出现会话进程仍在使用导致删除失败的情况.需要查询会话并将会话删除才能成功将数据库用户删除,比较不方便. 适用场景 自动删除oracle数据库用户 基本知识 orac ...
- avalon2学习教程08插入移除操作
本节介绍的ms-if指令与ms-visible很相似,都是让某元素"看不见",不同的是ms-visible是通过CSS实现,ms-if是通过移除插入节点实现. ms-if的用法与1 ...
- [Sphinx]全文索引Sphinx的使用配置
-------------------------------------------------------------------------------------- 搜索分为两种: 1. 对结 ...
- split()方法解析
split()方法用于将字符串分割为字符串数组. 废话不多说,直接贴代码: var str="How are you doing today?" console.log(str.s ...
- 测试Array对象的sort方法的作用。将1985,1970,1999,1998,2000,1963这些年份按升序输出。
<script type="text/javascript">var years = new Array(1985,1970,1999,1998,2000,1963); ...
- 使用 COM 类库创建链接桌面快捷方式
用到的 COM 类库: Windows Script Host Object Model --> Interop.IWshRuntimeLibrary.dll 示例代码: private sta ...
- idea git 发起一个pull request 请求
- 神经网络中的激活函数具体是什么?为什么ReLu要好过于tanh和sigmoid function?(转)
为什么引入激活函数? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层 ...