欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1051


题意概括

  有n只牛,有m个羡慕关系。

  羡慕关系具有传递性。

  如果A羡慕B,B羡慕C,那么我们认为A也羡慕C。

  问有多少牛被所有其他牛羡慕。


题解

  这次做这题我已经是第三遍了。

  USACO经典老题啊!(奶牛)

  POJ上面也有,叫popular cow。

  做法:

  先Tarjan强连通缩个点。

  然后,统计下入度。

  统计入度为0的点数。如果点数大于1,那么答案明显是0。

  如果点数是1,那么答案就是唯一的入度为0的点在缩点前点的个数。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+,M=+;
struct Gragh{
int cnt,x[M],y[M],nxt[M],fst[N];
void set(){
cnt=;
memset(fst,,sizeof fst);
}
void add(int a,int b){
x[++cnt]=a,y[cnt]=b;
nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int n,m;
int dfn[N],low[N],st[N],time,ans,top,bh[N],cnt[N];
bool inst[N],vis[N];
void Tarjan_Prepare(){
time=ans=top=;
memset(bh,,sizeof bh);
memset(st,,sizeof st);
memset(dfn,,sizeof dfn);
memset(low,,sizeof low);
memset(vis,,sizeof vis);
memset(inst,,sizeof inst);
}
void Tarjan(int x){
dfn[x]=low[x]=++time;
vis[x]=inst[x]=;
st[++top]=x;
for (int i=g.fst[x];i;i=g.nxt[i])
if (!vis[g.y[i]]){
Tarjan(g.y[i]);
low[x]=min(low[x],low[g.y[i]]);
}
else if (inst[g.y[i]])
low[x]=min(low[x],low[g.y[i]]);
if (low[x]==dfn[x]){
ans++;
bh[st[top]]=ans;
inst[st[top]]=;
while (st[top--]!=x){
bh[st[top]]=ans;
inst[st[top]]=;
}
}
}
int main(){
g.set();
scanf("%d%d",&n,&m);
for (int i=,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
g.add(a,b);
}
Tarjan_Prepare();
for (int i=;i<=n;i++)
if (!vis[i])
Tarjan(i);
memset(cnt,,sizeof cnt);
for (int i=;i<=m;i++)
if (bh[g.x[i]]!=bh[g.y[i]])
cnt[bh[g.x[i]]]++;
int which=-;
for (int i=;i<=ans;i++)
if (cnt[i]==){
if (which!=-){
printf("");
return ;
}
which=i;
}
int Ans=;
for (int i=;i<=n;i++)
if (bh[i]==which)
Ans++;
printf("%d",Ans);
return ;
}

BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点的更多相关文章

  1. [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量

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

  2. [Bzoj1051][HAOI2006]受欢迎的牛(tarjan)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 由题意可知,被所有牛仰慕的牛之间也互相仰慕,则最后的答案一定是唯一的强连通分量,如 ...

  3. bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

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

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

  5. bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)

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

  6. bzoj1051 [HAOI2006]受欢迎的牛

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

  7. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )

    tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...

  8. bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点

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

  9. [Bzoj1051][HAOI2006]受欢迎的牛(缩环)

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

随机推荐

  1. 使用fastreport以代码方式创建报表

    Report report = new Report();// register the "Products" tablereport.RegisterData(dataSet1. ...

  2. Oracle——存储过程的使用

    为什么使用存储过程? 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 存储过程的定义: 存储过程(Sto ...

  3. 第17月第26天 setImageForState变形

    1. 关于UIButton,既可以采用setBackgroundImage 来设置底部图片,同时也可以采用  setImage方法: 两者还是有一定区别的: 首先setBackgroundImage, ...

  4. POJ 2503 Babelfish (STL)

    题目链接 Description You have just moved from Waterloo to a big city. The people here speak an incompreh ...

  5. Android Retrofit 2.0使用

    实例带你了解Retrofit 2.0的使用,分享目前开发Retrofit遇到的坑和心得. 添加依赖 app/build.gradle 1 compile 'com.squareup.retrofit2 ...

  6. Dom4j用Xpath获取节点——(六)

    xml文档 <?xml version="1.0" encoding="utf-8"?> <书架> <书> <书名 n ...

  7. 从Linux内核中获取真随机数【转】

    转自:http://www.cnblogs.com/bigship/archive/2010/04/04/1704228.html 内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这 ...

  8. expdp和impdp导入和导出数据

    一  关于expdp和impdp     使用EXPDP和IMPDP时应该注意的事项:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用.EXPDP和IMPDP是服务端的工具程 ...

  9. Java上传文件FTP服务器代码

    1. 在实际的应用重,通常是通过程序来进行文件的上传. 2. 实现java上传文件到ftp服务器中 新建maven项目 添加依赖 <dependency> <groupId>c ...

  10. redux最佳实践

     对于初学者,redux的理念很难理解.其实redux并不难,redux核心理念就是数据仓库,所有数据操作来源都是明确的.只不过不是直接操作数据,而是交给特定的角色做特定的工作,分工明确.   pro ...