【题解】

  先用tarjan缩点,然后如果某个强联通分量的出度为0,则该强联通分量内的点数为答案,否则无解。因为若其他所有的强联通分量都有边连向Ai,则Ai必定没有出边,否则Ai连向的点所属的强联通分量也属于Ai。

  

#include<cstdio>
#include<algorithm>
#define N (50010)
#define rg register
using namespace std;
int n,m,tot,top,color,ans,last[N],st[N],col[N],dfn[N],low[N],num[N];
int degree_out[N];
struct edge{
int to,pre;
}e[N];
struct record{
int u,v;
}r[N];
inline int read(){
int k=0,f=1; char c=getchar();
while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
inline int min(int x,int y){return x<y?x:y;}
inline void add(int x,int y){e[++tot]=(edge){y,last[x]}; last[x]=tot;}
void tarjan(int x){
dfn[x]=low[x]=++tot; st[++top]=x;
for(rg int i=last[x],to;i;i=e[i].pre)
if(!dfn[to=e[i].to]) tarjan(to),low[x]=min(low[x],low[to]);
else if(!col[to]) low[x]=min(low[x],dfn[to]);
if(dfn[x]==low[x])
for(color++;st[top+1]!=x;top--) col[st[top]]=color,num[color]++;
}
int main(){
n=read(); m=read();
for(rg int i=1,u,v;i<=m;i++) u=read(),v=read(),add(u,v),r[i].u=u,r[i].v=v;
tot=0;
for(rg int i=1;i<=n;i++) if(!col[i]) tarjan(i);
for(rg int i=1,u,v;i<=m;i++){
u=r[i].u; v=r[i].v;
if(col[u]!=col[v]) degree_out[col[u]]++;
}
int ans=-1;
for(rg int i=1;i<=color;i++) if(!degree_out[i]){
printf("%d\n",num[i]);
return 0;
}
puts("0");
return 0;
}

  

最新文章

  1. angularJS(4)
  2. iOS开发 iOS10兼容访问http
  3. yum源安装Mysql
  4. MATLAB取余求模
  5. JAVA CDI 学习(1) - @Inject基本用法
  6. WP8:Unity3D之间的值传递
  7. 编译nginx的源码安装subs_filter模块
  8. YUV和RGB格式分析
  9. angular2 学习笔记 ( ngModule 模块 )
  10. Codeforces Beta Round #10 B. Cinema Cashier (树状数组)
  11. Team Foundation Server 2015使用教程--默认团队成员连接tfs及checkin操作
  12. LeetCode——Flatten Binary Tree to Linked List
  13. Linux系统中cgroup功能介绍
  14. 201521123037 《Java程序设计》第10周学习总结
  15. Git的使用详解
  16. python之testcenter操作
  17. JavaScript sort() 方法
  18. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
  19. silverlight用Encoding.UTF8读取shape文件的中文属性值 出现乱码
  20. 面经 cisco

热门文章

  1. cojs 1175. [顾研NOIP] 旅游电车
  2. CF 1016 C —— 思路
  3. e.printStackTrace()介绍
  4. PCB 钻孔补偿那点事
  5. kmp的练习们
  6. 月薪5K和月薪50K的程序员,差距都在哪里?
  7. 【转】深入理解Java多态原理
  8. maven+ssm+oracle实现简单的增删改查
  9. JavaScript学习四
  10. bootstrap 字体颜色 对齐方式