BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点
欢迎访问~原文出处——博客园-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 强连通缩点的更多相关文章
- [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5687 Solved: 3016[Submit][Sta ...
- [Bzoj1051][HAOI2006]受欢迎的牛(tarjan)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 由题意可知,被所有牛仰慕的牛之间也互相仰慕,则最后的答案一定是唯一的强连通分量,如 ...
- bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6064 Solved: 3179[Submit][Sta ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- [Bzoj1051][HAOI2006]受欢迎的牛(缩环)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6676 Solved: 3502[Submit][Sta ...
随机推荐
- C# PointToScreen
子窗体定位时,如果主窗口不在左上角,需要根据主窗口的坐标,相减才行. Point p1 = Label.PointToScreen(new Point(0, 0)); p1.X -= this.X; ...
- TCP/IP详解 卷1 第十八章 TCP的建立与终止
第十八章 TCP的建立与终止 tcpdump Tcpdump可以将网络中传送的数据报完截获下来进行分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉 ...
- BZOJ 4129 Haruna’s Breakfast
传送门 同样是树上莫队 只不过要求一个集合的mex,这里可以使用分块,可以在根号时间内得出解 /************************************************** P ...
- MySQL中查询行数最多的表并且排序
#切换到schema use information_schema; #查询数据量最大的30张表 并排序 select table_name,table_rows from tables order ...
- 有关Linux的.a、.so和.o文件(转)【原文章有些错误,自己已更改】
gcc 生成 .a静态库和 .so动态库 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库 ...
- centos6 python 安装 sqlite 解决 No module named ‘_sqlite3′
原文连接: http://blog.csdn.net/jaket5219999/article/details/53512071 系统red hat6.7 也即centos6.7 python3.5. ...
- mysql 查询优化~sql优化通用
一 简介:今天我们来探讨下SQL语句的优化基础 二 基础规则: 一 通用: 1 避免索引字段使用函数 2 避免发生隐式转换 3 order by字段需要走索引,否则会发生filesor ...
- python - class内置方法 doc/module/del(析构方法)/cal 方法
__doc__ # __doc__ #摘要信息 #这个属性不会继承给子类 class Test(): """这是摘要信息""" pass x ...
- 生成eps图形
(1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL) 【转】
转自:http://blog.chinaunix.net/uid-23381466-id-3837650.html 内核版本:2.6.38-11-generic 内核自己都大量利用内核符号表导出函数, ...