Brief Solution:

强连通tarjan+压缩点+判断是否除了一个点,其它点都有出度

Detailed Solution:

把牛看成点
若一个点b能到达点a,则b认为a受欢迎
若所有的点都能到达点a,则a被所有的牛欢迎

对于某个强连通中的点,任意两点可互达,互相受欢迎
对图求强连通,并把强连通压缩成一个点
若点a向与点a不在同一个强连通集合的点b,则点a所在的集合指向点b所在的集合(边)

若一个强连通集合的点(新图的点A)能被所有的点到达,则新图所有的点能到达点A
此时新图没有环,若一个点A能被所有的点到达,则除了该点,其它点的出度都不为0(图必有没有出度的点,因为图没有环)
则能被所有的点到达的点只有一个,否则会有环,矛盾
(在没有环的条件下,图中所有的点到汇集(到达)该点)

Code:

 #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>
#define maxn 10000
#define maxm 50000 struct node
{
long d;
struct node *next;
}*info[maxn+];
long x[maxm+],y[maxm+];
long dfn[maxn+],low[maxn+],stack[maxn+],num[maxn+],ans[maxn+],count=,sum=;
bool vis[maxn+],vis_stack[maxn+],next[maxn+]; long min(long a,long b)
{
if (a>b)
return b;
else
return a;
} void tarjan(long d)
{
vis[d]=false;
count++;
stack[count]=d;
dfn[d]=count;
low[d]=count;
struct node *p;
long nd,pre;
p=info[d];
while (p)
{
nd=p->d;
if (vis[nd]==true)
{
tarjan(nd);
low[d]=min(low[d],low[nd]);
}
else if (vis_stack[nd]==true)
low[d]=min(low[d],dfn[nd]);
p=p->next;
}
pre=count;
if (dfn[d]==low[d])
{
sum++;
while (d!=stack[count])
{
num[stack[count]]=sum;
vis_stack[stack[count]]=false;
count--;
}
num[stack[count]]=sum;
vis_stack[stack[count]]=false;
count--;
ans[sum]=pre-count; //count+1~pre
}
} int main()
{
long i,n,m,d;
struct node *p;
scanf("%ld%ld",&n,&m);
// for (i=1;i<=n;i++)
// info[i]=NULL;
for (i=;i<=m;i++)
{
scanf("%ld%ld",&x[i],&y[i]);
p=(struct node *) malloc (sizeof(struct node));
p->d=y[i];
p->next=info[x[i]];
info[x[i]]=p;
}
for (i=;i<=n;i++)
{
vis[i]=true;
vis_stack[i]=true;
}
for (i=;i<=n;i++)
if (vis[i]==true)
tarjan(i);
for (i=;i<=sum;i++)
next[i]=false;
for (i=;i<=m;i++)
if (num[x[i]]!=num[y[i]])
next[num[x[i]]]=true;
d=;
for (i=;i<=sum;i++)
if (next[i]==false)
{
if (d==)
d=i;
else
{
d=-;
break;
}
}
if (d==-)
printf("0\n");
else
printf("%ld\n",ans[d]);
return ;
}

haoi2006_受欢迎的牛_Solution的更多相关文章

  1. bzoj1051 [HAOI2006]受欢迎的牛

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4773  Solved: 2541[Submit][Sta ...

  2. bzoj 1051 (强连通) 受欢迎的牛

    题目:这里 题意: Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为 ...

  3. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  4. 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点

    Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...

  5. 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数

    [bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...

  6. 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...

  7. BZOJ 1051 受欢迎的牛(Tarjan缩点)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][S ...

  8. [bzoj1051] [HAOI2006]受欢迎的牛 (Tarjan+缩点)

    强连通图,缩点 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受 ...

  9. 【HAOI2006】【BZOJ1051】【p1233】最受欢迎的牛

    BZOJ难得的水题(其实是HA太弱了) 原题: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B ...

随机推荐

  1. vue 使用 proxyTable 解决跨域问题

    1.在 main.js 中,在引入 axios: import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$a ...

  2. 基于代的垃圾回收机制--《CLR via C#》读书笔记

    我们知道,垃圾回收在内存无限大的理想情况下是不需要的,正是因为内存存在的瓶颈,我们才需要垃圾回收.在<垃圾回收算法之引用计数算法>和<垃圾回收算法之引用跟踪算法>两篇文章中,我 ...

  3. python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  4. JavaScript实现选项卡(三种方法)

    本文实例讲述了js选项卡的实现方法. 一.html代码: <div id="div1"> <input class="active" type ...

  5. 【原】python3.7 无法pip安装提示ssl错误解决方案

    问题 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not av ...

  6. 记录:Ubuntu 18.04 安装 tensorflow-gpu 版本

    狠下心来重新装了系统,探索一下 gpu 版本的安装.比较令人可喜的是,跟着前辈们的经验,还是让我给安装成功了.由于我是新装的系统,就像婴儿般纯净,所以进入系统的第一步就是安装 cuda,只要这个不出错 ...

  7. (转载)利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较) 置顶

    原文链接:https://blog.csdn.net/qq_25352981/article/details/46914837#commentsedit 本文目标是通过使用SIFT和RANSAC算法, ...

  8. 3Sum(or k_Sum)

    Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...

  9. 利用可道云kodexplorer在树莓派raspbian上搭建私有云网盘

    可道云kodexplorer是一款开源私有云系统,类似于owncloud,Dropbox.SkyDrive,seafile等.将可道云kodexplorer搭建在树莓派上,从而在树莓派上存储.管理家庭 ...

  10. 华为云Istio服务网格,让应用治理智能化、可视化