BZOJ 1051 受欢迎的牛(Tarjan缩点)
1051: [HAOI2006]受欢迎的牛
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 4573 Solved: 2428
[Submit][Status][Discuss]
Description
Input
Output
一个数,即有多少头牛被所有的牛认为是受欢迎的。
Sample Input
1 2
2 1
2 3
Sample Output
HINT
题目链接:BZOJ 1051
做法:Tarjan缩点后,由于缩点后必定是一个DAG或者叫有向无环图,因此应该至少存在一个出度为0的缩点和一个入度为0的缩点,这题就是要统计出度为0的分量个数
若统计的数量有为1个,则说明全在一个连通分量内,即任意两点互相可达,所有牛都是受欢迎的;若大于1,则说明至少一个连通分量中的牛的数量少于n-1即欢迎不能直接或间接地全部集中在至少一头牛身上,就没有牛受欢迎了
代码:
- #include <stdio.h>
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 0x3f3f3f3f
- #define CLR(arr,val) memset(arr,val,sizeof(arr))
- #define LC(x) (x<<1)
- #define RC(x) ((x<<1)+1)
- #define MID(x,y) ((x+y)>>1)
- typedef pair<int,int> pii;
- typedef long long LL;
- const double PI=acos(-1.0);
- const int N=10010;
- const int M=50010;
- struct edge
- {
- int to;
- int pre;
- };
- edge E[M];
- int head[N],tot;
- int dfn[N],low[N],st[N],belong[N],ins[N],sc,ts,top,scnum[N];
- int out[N];
- void init()
- {
- CLR(head,-1);
- CLR(low,0);
- CLR(dfn,-1);
- CLR(belong,0);
- CLR(ins,0);
- sc=ts=top=0;
- CLR(scnum,0);
- CLR(out,0);
- }
- inline void add(int s,int t)
- {
- E[tot].to=t;
- E[tot].pre=head[s];
- head[s]=tot++;
- }
- void Tarjan(int u)
- {
- dfn[u]=low[u]=++ts;
- ins[u]=1;
- st[top++]=u;
- int v;
- for (int i=head[u]; ~i; i=E[i].pre)
- {
- v=E[i].to;
- if(dfn[v]==-1)
- {
- Tarjan(v);
- if(low[v]<low[u])
- low[u]=low[v];
- }
- else if(ins[v])
- {
- if(dfn[v]<low[u])
- low[u]=dfn[v];
- }
- }
- if(dfn[u]==low[u])
- {
- ++sc;
- do
- {
- v=st[--top];
- ins[v]=0;
- belong[v]=sc;
- ++scnum[belong[v]];
- }while (u!=v);
- }
- }
- int main(void)
- {
- int n,m,a,b,i,j,u,v;
- while (~scanf("%d%d",&n,&m))
- {
- init();
- for (i=0; i<m; ++i)
- {
- scanf("%d%d",&a,&b);
- add(a,b);
- }
- for (i=1; i<=n; ++i)
- if(dfn[i]==-1)
- Tarjan(i);
- for (u=1; u<=n; ++u)
- {
- for (j=head[u]; ~j; j=E[j].pre)
- {
- v=E[j].to;
- if(belong[v]==belong[u])
- continue;
- ++out[belong[u]];
- }
- }
- int zero_out=0;
- int scindx=-1;
- for (i=1; i<=sc; ++i)
- {
- if(!out[i])
- {
- ++zero_out;
- scindx=i;
- }
- }
- zero_out>1?puts("0"):printf("%d\n",scnum[scindx]);
- }
- return 0;
- }
BZOJ 1051 受欢迎的牛(Tarjan缩点)的更多相关文章
- bzoj 1051 受欢迎的牛-tarjan
https://www.lydsy.com/JudgeOnline/problem.php?id=1051 如果A喜欢B,那么A->B连边,那么整个图储存下来,如果有好多个牛是受欢迎的,那么他们 ...
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...
- 【tarjan】BZOJ 1051:受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 1642[Submit][Sta ...
- BZOJ 1051 受欢迎的牛 缩点
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1051 题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数( ...
- BZOJ 1051 受欢迎的牛
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
- B1051 受欢迎的牛 tarjan缩点
就是一道tarjan缩点的板子,之前在洛谷做过.但是我发现一个事,就是函数里面有一句话: void tarjan(int x) { dfn[x] = low[x] = ++tot; str[++top ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
随机推荐
- codeforces B. Dima and Text Messages 解题报告
题目链接:http://codeforces.com/problemset/problem/358/B 题目意思:给出n个单词(假设为word1,word2.word3...wordn)和一句test ...
- OC内存管理--zombie对象
当我们对于内存进行手动管理的时候,会出现两种错误:一种是野指针错误,一种则为内存泄露.这两点也是我们去管理内存时最终要解决的问题. 内存泄漏是指:不在使用的对象,一直保留在内存中未被销毁,一直占有着内 ...
- js 在myeclipse中报错
转myeclipse中的js文件报错 整理一下,希望帮到 遇到此问题的哥们.姐们. 方法一:myeclipse9 很特殊 和 myeclipse10 不一样,所以myeclipse9 不能使用该方 ...
- MVC中session创建并获取问题
有两个ActionResult分别为A和B,如下 public ActionResult A() { Session["test"]="123"; return ...
- 会员制实现C2B定制有机农产品,被中粮我买投资的良食网这样卖有机生鲜
前几天,中粮我买网战略投资了位于深圳的有机生鲜自营平台良食网,宣布双方将会在供应链上展开合作.然而良食网对大家来说还是比较陌生的,为此36氪专访了良食网的创始人唐忠. 良食网成立于2011年,是一家以 ...
- ytu 1940:Palindromes _easy version(水题)
Palindromes _easy version Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 47 Solved: 27[Submit][Statu ...
- Java Hour 39 Maven ( 1 )
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 39 Maven 1 Perhaps you are running ...
- jquery笔记(仅供个人参考)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- hdu 3466 排序01背包
也是好题,带限制的01背包,先排序,再背包 这题因为涉及到q,所以不能直接就01背包了.因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m], ...
- Xamarin Android长度单位区别
Xamarin Android长度单位区别 Android中长度单位有6种:px.in.mm.pt.dp/dip.sp.其中,px表示显示设备的一个像素:in表示显示设备的1英寸:mm表示显示设备的1 ...