奶牛互相之间有爱慕关系,找到被其它奶牛都喜欢的奶牛的数目

用tarjan缩点,然后判断有向图中出度为0的联通分量的个数,如果为1就输出联通分量中的点的数目,否则输出0.

算法源自kb模板

 #include<cstdio>
#include<iostream>
#include<cstring>
const int MAXN=;//点数
const int MAXM=;//边数
struct Edge
{
int to,next;
}edge[MAXM];
int head[MAXN],tot;
int Low[MAXN],DFN[MAXN],Stack[MAXN],Belong[MAXN];//Belong数组的值是1~scc
int Index,top;
int scc;//强连通分量的个数
bool Instack[MAXN];
int num[MAXN];//各个强连通分量包含点的个数,数组编号1~scc
//num数组不一定需要,结合实际情况
int out[MAXN],tmp,Num,ans;
void addedge(int u,int v)
{
edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++;
}
void Tarjan(int u)
{
int v;
Low[u]=DFN[u]=++Index;
Stack[top++]=u;
Instack[u]=true;
for(int i=head[u];i != -;i=edge[i].next)
{
v=edge[i].to;
if(!DFN[v])
{
Tarjan(v);
if(Low[u] > Low[v])Low[u]=Low[v];
}
else if(Instack[v] && Low[u] > DFN[v])
Low[u]=DFN[v];
}
if(Low[u]==DFN[u])
{
scc++;
do
{
v=Stack[--top];
Instack[v]=false;
Belong[v]=scc;
num[scc]++;
}
while(v != u);
}
}
void solve(int N)
{
memset(out,,sizeof(out));
memset(Belong,,sizeof(Belong));
memset(DFN,,sizeof(DFN));
memset(Instack,false,sizeof(Instack));
memset(num,,sizeof(num));
Index=scc=top=;
for(int i=;i <= N;i++)
if(!DFN[i])
Tarjan(i);
}
void init()
{
tot=;
memset(head,-,sizeof(head));
}
int main()
{
int n,m;
int i,j,v;
//freopen("1.in","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
int q,p;
for(i=;i<=m;i++)
{
scanf("%d%d",&p,&q);
addedge(p,q);
}
solve(n);
for(i=;i<=n;i++)
{
for(v=head[i];v!=-;v=edge[v].next)
{
if(Belong[i]!=Belong[edge[v].to])
{
out[Belong[i]]++;
}
}
}
ans=,Num=;
for(i=;i<=scc;i++)
{
if(!out[i])
{
Num++;
tmp = i;
}
}
if(Num==)
{
for(i=;i<=n;i++)
{
if(Belong[i]==tmp)
ans++;
}
printf("%d\n",ans);
}
else
{
printf("0\n");
}
}
return ;
}

最新文章

  1. excel将单元格格式由数字转为文本
  2. js之引用类型
  3. createSQLQuery与createQuery的区别
  4. Mac 平台下安装 OpenVC
  5. NESPER的大体结构 z
  6. EntityFramework 中生成的类加注释
  7. Revenge of Fibonacc
  8. 吐槽一下Activiti用户手册和一本书
  9. 安卓MonkeyRunner源码分析之工作原理架构图及系列集合
  10. JS左侧菜单-02
  11. canvas基础—图形变换
  12. Java中日期格式化SimpleDateFormat类包含时区的处理方法
  13. SuperMap 二维地图和三维场景弹窗窗口大小控制
  14. mysql同时使用order by和limit查询时的一个严重隐患 -- 丢失数据
  15. 使用Java开发微信公众平台(二)——消息的接收与响应
  16. C和指针第13章第4题
  17. Oracle 11gR2 RAC监听器原理介绍
  18. Mac完整卸载Android Studio的方法
  19. eclipse 查看源码 source not found
  20. MFC中存在的不属于任何类的全局函数,它们统统在函数名称开头加上Afx

热门文章

  1. Repository
  2. Linux下web目录权限设置
  3. [实战]MVC5+EF6+MySql企业网盘实战(27)——应用列表
  4. lnmp一键安装包删除添加的域名
  5. windows下安装redis以及简单的事例
  6. Song Jiang&#39;s rank list
  7. Hadoop 免密码登陆(ssh)
  8. 内存不能为read修复方法:(转自:网上(忘记了))
  9. hiho #1272 买零食 [Offer收割]编程练习赛2
  10. 查看一些特定sql需求的书写