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);
}
}

最新文章

  1. robotframework,selenium启动不了打不开浏览器的问题访问不了网页
  2. 【Python】djangorestframework 基于django框架的接口开发
  3. redis的info
  4. html部分---样式表,选择器;
  5. Shell如何传递字符串
  6. WCF X.b 操作引用了已经从 Y.b 操作导出的消息元素 [http://tempuri.org/:b]。可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性更改其中一个操作的名称...
  7. Application路径
  8. Ucenter注册后,需要二次登录才能同步登录的解决方案
  9. 右键打开cmd命令出错
  10. JAVA基础——编程练习(一)
  11. 在Bootstrap开发框架中使用Grid++报表
  12. Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance. 微信小程序警告
  13. 在c:forEach与s:iterator里面使用if标签判断当前位置是否为2的倍数
  14. String主要方法
  15. JS构造函数原理与原型
  16. ef 仓储模式 Redis
  17. HDMI中checksum计算法
  18. js去除字符串中的空格
  19. Docker 容器十诫
  20. bzoj2763: [JLOI2011]飞行路线 最短路

热门文章

  1. UWP入门(九)-- 枚举和查询文件和文件夹
  2. LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
  3. layer 1.9.2 发布,国产 Web 弹层不懈的前行者
  4. Oracle数据库密码重置、导入导出库命令
  5. Delphi 10.2 Tokyo的新特性
  6. 利用POi3.8导出excel产生大量xml临时文件怎么办?
  7. express 中间件的理解
  8. Hexo+NexT(一):在Windows下安装Hexo+NexT及搭建博客
  9. MQ消息队列搭建命令及方法
  10. Mac安装MySQL-python报错解决