题意:有一群牛,求被所有牛都认可的牛的个数

每个连通分量建一个缩点,出度为零的缩点包含的点的个数即为要求值

如果有多个出度为零的,直接输出零,否则输出那唯一一个出度为零的缩点包含的点的个数

#include<stdio.h>
#include<string.h>
#define N 11000
int dfn[N],low[N],sta[N],visit[N],suo[N],ans,outdegree[N],top,num[N];
int head[N],yong,n,m;
struct node {
int v,next;
}bian[N*10];
void init() {
memset(sta,0,sizeof(sta));
ans=0;
memset(outdegree,0,sizeof(outdegree));
memset(suo,0,sizeof(suo));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(visit,0,sizeof(visit));yong=0;top=0;
memset(head,-1,sizeof(head));
memset(num,0,sizeof(num));
}
void addedge(int u,int v){
bian[yong].v=v;
bian[yong].next=head[u];
head[u]=yong++;
}
int Min(int u,int v) {
return u>v?v:u;
}
void tarjan(int u) {
visit[u]=1;
dfn[u]=++yong;
low[u]=yong;
sta[++top]=u;
int i,v;
for(i=head[u];i!=-1;i=bian[i].next) {
v=bian[i].v;
if(!dfn[v]) {
tarjan(v);
low[u]=Min(low[u],low[v]);
}
else
if(visit[v]==1)
low[u]=Min(low[u],dfn[v]); }
int coun=0;
if(dfn[u]==low[u]) {
ans++;
do{
v=sta[top--];
coun++;
visit[v]=2;
suo[v]=ans;//缩点
}while(v!=u);
num[ans]=coun;//记录缩点包含的点的个数
}
}
int main() {
int i,j,a,b;
while(scanf("%d%d",&n,&m)!=EOF) {
init();
while(m--) {
scanf("%d%d",&a,&b);
addedge(a,b);
}
ans=0;
yong=0;
for(i=1;i<=n;i++)
if(visit[i]!=2)
tarjan(i);
/* for(i=1;i<=n;i++)
printf("%d\n",suo[i]);*/
for(i=1;i<=n;i++)
for(j=head[i];j!=-1;j=bian[j].next)
if(suo[i]!=suo[bian[j].v])
outdegree[suo[i]]++;
yong=0;
for(i=1;i<=ans;i++)
if(outdegree[i]==0){
yong++;
j=i;
}
if(yong>1)
printf("0\n");
else
printf("%d\n",num[j]);
}
return 0;
}

最新文章

  1. jQueryMobile 网页在UC等游览器上无法正常显示或者是无法自适应设备大小,但在QQ游览器上能正常显示的解决方法
  2. NSClassFromString 和 遍历UIView获取她所在的UIViewController的tips
  3. DRY原则
  4. sublime text2 常用快捷键
  5. 注意!你的Thread.Abort方法真的让线程停止了吗?
  6. Java 最简单的计算器——使用Args参数
  7. Linux中Bash发现重大安全漏洞修改方法
  8. cisco通过控制口或者通过远程配置交换机
  9. 【贪心+中位数】【UVa 11300】 分金币
  10. veridata实验例(5)在更改主键列值,update操作将被分成两个语句
  11. noi 1.8 11图像旋转
  12. java并发 - 自底向上的原理分析
  13. VueJs(9)---vue-router(进阶1)
  14. vim打开退出命令
  15. RT-SA-2019-005 Cisco RV320 Command Injection Retrieval
  16. nginx 禁止恶意域名解析
  17. sqlserver为不同数据库建立不同访问权限的帐号
  18. Python2.7-bz2
  19. apk中添加第三方so文件
  20. 【转】实现Sqlite datediff日期时间相减的方法

热门文章

  1. hdu 1542(线段树+扫描线 求矩形相交面积)
  2. 历届试题 邮局(dfs+剪枝)
  3. 【JLOI 2014】 松鼠的新家
  4. iOS开发之KVC全解
  5. 97. ExtJS之EditorGridPanel afteredit属性
  6. jquery的ajax同步异步执行
  7. Kubernetes Port Forward 机制访问 pod
  8. ROS-URDF-Xacro
  9. Application windows are expected to have a root view controller at the end of application launch
  10. Hibernate_01_初体验