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为了体验生活,来到了住在大草原的约翰家.今天一大早,约翰因为有事要出 ...
随机推荐
- 上下两个div, 一个固定高度, 另一个铺满屏幕
<div class="box"> <div class="el1"></div> <div class=" ...
- CSS多行文字垂直居中的两种方法
之前写过一篇关于:CSS左右居中对齐的文章,里面提到的两种方法其实也可以引申为垂直居中对齐.写这篇文章是因为要兼容IE6.IE7的问题,我们都知道一行文字时可以通过line-height来设置垂直居中 ...
- AIR程序调用本地默认应用程序打开本地文件
当我用下面语句的时候,可以成功打开桌面文件夹下面的文件: var file:File = File.desktopDirectory.resolvePath("test.jpg") ...
- css样式表2
<head> <style type="text/css"> .main { height:42px; width:100%; text-align:cen ...
- LeetCode题解:Flatten Binary Tree to Linked List:别人的递归!
总是在看完别人的代码之后,才发现自己的差距! 我的递归: 先把左侧扁平化,再把右侧扁平化. 然后找到左侧最后一个节点,把右侧移动过去. 然后把左侧整体移到右侧,左侧置为空. 很复杂吧! 如果节点很长的 ...
- Python的几种主流框架
参考:https://www.cnblogs.com/linkenpark/p/5881586.html
- cxgrid合并值相同的某列
设置 cxGrid 的某列的 CellMerging 属性可使这一列相同值的单元格合并. 1)cxGridDBTableViewColumn1.Options.CellMerging:=true 2 ...
- Linux crontab使用方法
crontab命令主要用于设置命令行或者脚本周期性的执行.该命令从标准输入设备读取指令,并将其存放于文件中,以供之后读取和执行.本文主要讲述crontb命令的基本语法和配置方法. 1.crontab命 ...
- 在JSP页面中导入jstl标签库
1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...
- [PHP]对Json字符串解码返回NULL的一般解决方案
---------------------------------------------------------------------------------------------------- ...