按B->A连边,tarjan缩点,然后找入度为0的连通分量,如果有1个,则ans=size[i],如果大于一个则ans=0;

当然如果按A->B连边就是找出度为0的(表示没有被它喜欢的,这样的连通分量才有可能所被所有的喜欢)

 /**************************************************************
Problem: 1051
User: Tunix
Language: C++
Result: Accepted
Time:52 ms
Memory:2308 kb
****************************************************************/ //BZOJ 1051
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
const int N=; void read(int &v){
v=;int sign=; char ch=getchar();
while(ch<'' || ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){v=v*+ch-''; ch=getchar();}
v*=sign;
}
/****************tamplate***********************/
int n,m;
int head[N],to[N*],next[N*],cnt;
void add(int a,int b){
to[++cnt]=b; next[cnt]=head[a]; head[a]=cnt;
}
int dfn[N],low[N],belong[N],du[N],dfs_clock,size[N],SCC;
bool inst[N];
int st[N],top;
void tarjan(int x){
int y;
dfn[x]=low[x]=++dfs_clock;
st[top++]=x;
inst[x]=;
for(int i=head[x];i;i=next[i]){
y=to[i];
if (!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if (inst[y]) low[x]=min(low[x],dfn[y]);
}
if (dfn[x]==low[x]){
SCC++;size[SCC]=;
for(y=;y!=x;){
y=st[--top];
inst[y]=;
belong[y]=SCC;
size[SCC]++;
}
}
}
void rebuild(){
F(x,,n)
for(int i=head[x];i;i=next[i])
if (belong[x]!=belong[to[i]]) du[belong[to[i]]]++;
}
/***********************************************/
int main(){
read(n); read(m);
int a,b;
F(i,,m){
read(a); read(b);
add(b,a);
}
F(i,,n) if (!dfn[i]) tarjan(i);
rebuild();
int ans=;
if (SCC==) ans=n;
else{
int tot=;
F(i,,SCC) if (du[i]==) {tot++; ans=size[i];}
if (tot>) ans=;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. 基于 Asp.Net的 Comet 技术解析
  2. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
  3. 实用SQL语句大全
  4. Js~(function(){})匿名自执行方法的作用
  5. Power Gating的设计(架构)
  6. C 记录
  7. oracle的触发器
  8. Matlab 取子矩阵
  9. elasticsearch-5.0.0初见
  10. bzoj[1835][ZJOI2010]base 基地选址
  11. [Swift]LeetCode402. 移掉K位数字 | Remove K Digits
  12. API防重放机制
  13. PLA-1
  14. Deep Neural Networks for Object Detection(翻译)
  15. 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)
  16. token和盐
  17. awt
  18. python去重(针对密码)
  19. 随机生成三个数(break用法)
  20. Android Studio 增加按钮响应事件

热门文章

  1. cocos2dx-lua 批量打包及修改
  2. java web服务器文件的下载(有下载弹出匡)
  3. a标签替代input的submit提交功能
  4. javascript之正则表达式总结
  5. ES6新增Promise
  6. VIM小技巧之文件名补全
  7. ADO.NET笔记——使用Command执行增删改操作,通过判断ExecuteNonQuery()返回值检查是否操作成功
  8. HTML5应用开发:JavaScript库iScroll教程
  9. HTML5-WebWorker
  10. 例题6-7 Trees on the level ,Uva122