这是一道水题,实际考察的是你会不会写强连通分量。。。(在BZOJ上又水了一道题)

Description

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

Input

  第一行两个数N,M。 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可
能出现多个A,B)

Output

  一个数,即有多少头牛被所有的牛认为是受欢迎的。

Sample Input

3 3
1 2
2 1
2 3

Sample Output

1

HINT

100%的数据N<=10000,M<=50000
 
思路:直接强连通分量缩点,然后,因为题目没有告诉你  当没有一头牛受欢迎时  应该输出什么,所以我们认为题目一定有解,所以直接tarjan就好啦
强行给出代码
 #include<stdio.h>
#include<string.h>
int head[],F[],w[],ass,stack[],n,point,m,D[],ans;
int min(int x,int y)
{
return x>y?y:x;
}
bool f[];
struct shit{
int aim,next,from;
}e[];
int T,time[],dfn[];
void tarjan(int x)
{
time[x]=dfn[x]=++T;
f[x]=true;
stack[++ass]=x;
for(int k=head[x];k;k=e[k].next)
{
int v=e[k].aim;
if(!time[v])
{
tarjan(v);
dfn[x]=min(dfn[x],dfn[v]);
}
else if(f[e[k].aim])dfn[x]=min(dfn[x],time[v]);
}
if(dfn[x]==time[x])
{
f[x]=false;
while(stack[ass]!=x)
{
w[x]++;
F[stack[ass]]=x;
f[stack[ass--]]=false;
}
ass--;
}
}
void fuck(int x,int y)
{
e[++point].aim=y;
e[point].from=x;
e[point].next=head[x];
head[x]=point;
}
int main()
{
int a,b;
scanf("%d%d",&n,&m);
for(int i=;i<=m;++i)
{
scanf("%d%d",&a,&b);
fuck(a,b);
}
for(int i=;i<=n;++i)F[i]=i,w[i]=;
for(int i=;i<=n;++i)
if(!time[i])tarjan(i);
memset(head,,sizeof(head));
point=;
for(int i=;i<=m;++i)
{
if(F[e[i].from]==F[e[i].aim])continue;
else {
D[F[e[i].from]]++;
fuck(F[e[i].aim],F[e[i].from]);
}
}
for(int i=;i<=n;i++)
if(F[i]==i&&!D[i])ans+=w[i];
printf("%d",ans);
return ;
}

没什么好PS的

简单tarjan》一道裸题(BZOJ1051)(easy)的更多相关文章

  1. tarjan讲解(用codevs1332(tarjan的裸题)讲解)

    主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都 ...

  2. 【填坑】bzoj3224 splay裸题

    人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...

  3. 【二分图裸题】poj1325机器调度

    题目大意:有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式 然后有k个作业,每个作业有三个参数i,a,b i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成[或者] ...

  4. POJ 2409 Let it Bead(polya裸题)

    题目传送:http://poj.org/problem?id=2409 Description "Let it Bead" company is located upstairs ...

  5. UESTC 1591 An easy problem A【线段树点更新裸题】

    An easy problem A Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others ...

  6. 【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)

    Description 存在如下递推式: F(n+1)=A1*F(n)+A2*F(n-1)+-+An*F(1) F(n+2)=A1*F(n+1)+A2*F(n)+-+An*F(2) - 求第K项的值对 ...

  7. LeetCode 第 287 号问题:寻找重复数,一道非常简单的数组遍历题,加上四个条件后感觉无从下手

    今天分享的题目来源于 LeetCode 第 287 号问题:寻找重复数. 题目描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个 ...

  8. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  9. LCT裸题泛做

    ①洞穴勘测 bzoj2049 题意:由若干个操作,每次加入/删除两点间的一条边,询问某两点是否连通.保证任意时刻图都是一个森林.(两点之间至多只有一条路径) 这就是个link+cut+find roo ...

随机推荐

  1. 使用hping3/nping施行DoS攻击

    DDoS攻击是常见的攻击方式,每小时大约发生28次.http://www.digitalattackmap.com提供在世界范围内的DDoS实时攻击分布图: 从DDoS攻击的地图上就可以看出国际形势: ...

  2. rebar自定义template

    在开发过程中rebar自带模板建立项目,或多或少不能满足自己的开发需求.本人又是那种懒人,所以就要想办法偷懒.查看了priv模板 打造适合自己的项目模板.下面我简单的介绍整个模板的打造过程. 准备过程 ...

  3. 【Xamarin 】MonoTouch - UIImageView响应点击事件

    //圆角头像 UIImageView _avatarView = new UIImageView(new RectangleF(_blockSpace, _blockSpace, 2 * _avata ...

  4. weblogic控制台的启动与禁用

    在一些安全漏洞扫描中,经常会扫描发现,使用weblogic管理控制台,会有个中危的漏洞. http://192.168.10.46:7001/console/login/LoginForm.jsp W ...

  5. Linux 多路复用 select / poll

    多路复用都是在阻塞模式下有效! linux中的系统调用函数默认都是阻塞模式,例如应用层读不到驱动层的数据时,就会阻塞等待,直到有数据可读为止. 问题:在一个进程中,同时打开了两个或者两个以上的文件,读 ...

  6. 第16篇 Shell脚本基础(一)

    1.什么是shell?shell是一个命令解释器. 是介于操作系统内核与用户之间的一个绝缘层.对于一个linux系统使用人员来说,shell是你驾驭类linux系统最基本的工具.所有的系统命令和工具再 ...

  7. iptables防火墙工作原理

    iptables防火墙工作原理 简介:iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防火墙基于内核编码实现,具有非常稳定的性能和高效率: iptables属 ...

  8. mysql + keepalived架构

    mysql + keepalived架构 文档(这个文章共有三篇): http://blog.itpub.net/27000195/viewspace-1364706/

  9. linux的审计功能(audit)

    为了满足这样的需求:记录文件变化.记录用户对文件的读写,甚至记录系统调用,文件变化通知.什么是auditThe Linux Audit Subsystem is a system to Collect ...

  10. 1146 Topological Order

    题意:判断序列是否为拓扑序列. 思路:理解什么是拓扑排序就好了,简单题.需要注意的地方就是,因为这里要判断多个,每次判断都会改变入度indegree[],因此记得要把indegree[]留个备份.ps ...