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

--------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<stack>
 
#define rep( i, n ) for( int i = 0; i < n; ++i )
#define clr( x, c ) memset( x, c, sizeof( x ) )
#define Rep( i, n ) for( int i = 1; i <= n; ++i )
 
using namespace std;
 
const int maxn = 10000 + 5;
const int maxm = 50000 + 5;
 
struct edge {
int to;
edge* next;
};
 
edge* pt;
edge* head[ maxn ];
edge EDGE[ maxm ];
 
void init() {
pt = EDGE;
clr( head, 0 );
}
 
void add_edge( int u, int v ) {
pt -> to = v;
pt -> next = head[ u ];
head[ u ] = pt++;
}
 
int dfs_clock, scc_cnt;
int dfn[ maxn ], low[ maxn ], scc[ maxn ];
stack< int > S;
 
void tarjan( int x ) {
dfn[ x ] = low[ x ] = ++dfs_clock;
S.push( x );
for( edge* e = head[ x ]; e; e = e -> next ) {
int to = e -> to;
if( ! dfn[ to ] ) {
tarjan( to );
low[ x ] = min( low[ x ], low[ to ] );
} else if( ! scc[ to ] ) 
   low[ x ] = min( low[ x ], dfn[ to ] );
}
if( low[ x ] == dfn[ x ] ) {
scc_cnt++;
for( ; ; ) {
int o = S.top();
S.pop();
scc[ o ] = scc_cnt;
if( o == x ) break;
}
}
}
 
void TARJAN( int n ) {
dfs_clock = scc_cnt = 0;
clr( dfn, 0 );
clr( scc, 0 );
rep( i, n ) if( ! dfn[ i ] ) tarjan( i );
}
 
int out[ maxn ];
 
int main() {
init();
int n, m;
cin >> n >> m;
while( m-- ) {
int u, v;
scanf( "%d%d", &u, &v );
add_edge( u - 1, v - 1 );
}
TARJAN( n );
clr( out, 0 );
rep( i, n ) {
int x = scc[ i ];
for( edge* e = head[ i ]; e; e = e -> next )
   if( x != scc[ e -> to ] ) out[ x ]++;
   
}
int ans = -1, cnt = 0;
Rep( i, scc_cnt ) if( ! out[ i ] )
   ans = i, cnt++;
   
if( ans == -1 || cnt > 1 ) printf( "-1\n" );
else {
cnt = 0;
rep( i, n ) 
   if( scc[ i ] == ans ) cnt++;
   
cout << cnt << "\n";
}
return 0;
}

--------------------------------------------------------------------------

1051: [HAOI2006]受欢迎的牛

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2712  Solved: 1426
[Submit][Status][Discuss]

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

Source

BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )的更多相关文章

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

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

  2. bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...

  3. BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)

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

  4. BZOJ 1051: [HAOI2006]受欢迎的牛 缩点

    1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

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

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

  6. bzoj 1051 [HAOI2006]受欢迎的牛(tarjan缩点)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1051 题解:缩点之后判断出度为0的有几个,只有一个那么输出那个强连通块的点数,否者 ...

  7. 洛谷 P2341 BZOJ 1051 [HAOI2006]受欢迎的牛

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

  8. BZOJ 1051: [HAOI2006]受欢迎的牛

    Description 一个有向图,求所以能被别的点到达的点的个数. Sol Tarjan + 强连通分量 + 缩点. 缩点以后找强连通分量,缩点,然后当图有且仅有1个出度为1的点时,有答案. Cod ...

  9. BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1051 题解: 强连通缩点得到DAG图,将图转置一下,对入度为零的点跑dfs看看能不能访问 ...

随机推荐

  1. Nanjing GDG Meetup 8月线下活动

    致各位亲爱的 Google 技术爱好者 很高兴的通知各位朋友,Nanjing GDG 将在本周六 (08/31) 举办线下活动,讨论 Android 开发实战技巧,热烈欢迎大家报名参加. 时间:  8 ...

  2. 如何在VMware虚拟机上安装Linux操作系统(Ubuntu)

    作为初学者想变为计算机大牛非一朝一夕,但掌握基本的计算机操作和常识却也不是多么难的事情.所以作为一名工科男,为了把握住接近女神的机会,也为了避免当白痴,学会装系统吧!of course为避免把自己的电 ...

  3. EF 4.0 更新数据时候的一个错误及其处理

    错误如图: 修改下方法后可以进行更新了.但是中间多了一步查询 /// <summary> /// 更新一个产品分类 /// </summary> /// <param n ...

  4. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

  5. SQL Server2008不允许修改表结构解决办法

    1.修改表结构遇到 2.点击取消 3.打开[工具]—[选项] 4.找到[Desiginers]标签,在右边找到“阻止保存要求重现创建表的更改”,取消勾选.

  6. jquery $.post 返回json数据

    $(function () { $("#prompt").hide(); $("#searchIpt").keyup(function () { var key ...

  7. 如何在oracle中导入导出(备份&恢复)dmp数据库文件

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...

  8. MFC的资源切换AFX_MANAGE_STATE(AfxGetStaticModuleState()

    转载自:http://blog.chinaunix.net/uid-20532101-id-1931929.html 以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的 ...

  9. 老旧Webkit浏览器行内元素0间距问题

    有时我们希望display:inline-block的元素之间的天衣无缝.紧密相依,比如说如下的情情形: 一般情况下我们使用如下代码可以实现: .pageNav { font-size:; text- ...

  10. 安卓自定义view_GDI绘图 _2d绘图_canvas绘图

    2014年到2016年 发生了很多事情,如今已成定局,现在想忘掉这些烦恼的事情,找点以前想干没有干的事情来做,塞满大脑就不去想了. 之前,一直想做一款挂机类游戏,各种平台和开发语言都选择过了,从htm ...