POJ2533&&SP1799 The Bottom of a Graph(tarjan+缩点)
2024-09-01 02:23:13
POJ2553
SP1799
我们知道单独一个强连通分量中的所有点是满足题目要求的
但如果它连出去到了其他点那里,要么成为新的强连通分量,要么失去原有的符合题目要求的性质
所以只需tarjan缩点求出所有强连通分量,再O(E)枚举所有边,是否会成为连接一个分量与另一个分量的边——即一条出度——即可
如果一个分量没有出度,那么他中间的所有点都是符合题目要求的点
(因为快读快输加了太长所以就不贴了)
const int N=5005,M=N*N>>1;
int h[N],en,n,m,dfn[N],out[N],bel[N],low[N],num,cnt;
stack<int> st;
struct edge{int n,u,v;}e[M]; //前向星存边
inline void add(const int &x,const int &y){e[++en]=(edge){h[x],x,y},h[x]=en;}
inline void tarjan(int x){ //一个tarjan缩点STL栈模板
st.push(x);
dfn[x]=low[x]=++num;
for(int i=h[x];i;i=e[i].n){
int y=e[i].v;
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(!bel[y])
low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x]){
cnt++;
int TOP;
do{
TOP=st.top();
st.pop();
bel[TOP]=cnt;
}while(TOP!=x);
}
}
signed main(){
read(n);
while(n){
en=num=cnt=0;
memset(h,0,sizeof h);
memset(dfn,0,sizeof dfn);
memset(out,0,sizeof out);
memset(bel,0,sizeof bel);
memset(low,0,sizeof low);
read(m);
while(m--){
int x,y;
read(x),read(y);
add(x,y);
}
for(int i=1;i<=n;i++) if(!dfn[i]) //跑缩点
tarjan(i);
for(int i=1,u,v;i<=en;i++){
u=e[i].u,v=e[i].v;
if(bel[u]!=bel[v]) out[bel[u]]++; //判断每条边的起点终点是否在同一强连通分量中,如果不是,则起点所在强连通分量出度加1
}
for(int i=1;i<=n;i++) if(!out[bel[i]]) //如果点i所在强连通分量没有出度则满足要求,输出
Write(i,' ');
printf("\n"); //统一换行
read(n);
}
}
最新文章
- robotframework,selenium启动不了打不开浏览器的问题访问不了网页
- 【Python】djangorestframework 基于django框架的接口开发
- redis的info
- html部分---样式表,选择器;
- Shell如何传递字符串
- WCF X.b 操作引用了已经从 Y.b 操作导出的消息元素 [http://tempuri.org/:b]。可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性更改其中一个操作的名称...
- Application路径
- Ucenter注册后,需要二次登录才能同步登录的解决方案
- 右键打开cmd命令出错
- JAVA基础——编程练习(一)
- 在Bootstrap开发框架中使用Grid++报表
- Now you can provide attr ";wx:key"; for a ";wx:for"; to improve performance. 微信小程序警告
- 在c:forEach与s:iterator里面使用if标签判断当前位置是否为2的倍数
- String主要方法
- JS构造函数原理与原型
- ef 仓储模式 Redis
- HDMI中checksum计算法
- js去除字符串中的空格
- Docker 容器十诫
- bzoj2763: [JLOI2011]飞行路线 最短路
热门文章
- UWP入门(九)-- 枚举和查询文件和文件夹
- LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
- layer 1.9.2 发布,国产 Web 弹层不懈的前行者
- Oracle数据库密码重置、导入导出库命令
- Delphi 10.2 Tokyo的新特性
- 利用POi3.8导出excel产生大量xml临时文件怎么办?
- express 中间件的理解
- Hexo+NexT(一):在Windows下安装Hexo+NexT及搭建博客
- MQ消息队列搭建命令及方法
- Mac安装MySQL-python报错解决