题解【[HAOI2006]受欢迎的牛】
切水题,写题解~
tarjan缩一波点,然后
只有一个出度为0的点:他的size就是答案
有多个初度为0的点:无解,0个
因为是强联通分量,所以肯定有出度为0的点,否则——就是你tarjan写挂了~
\]
#include<iostream>
#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>
#define MAXN 200000
using namespace std ;
inline void read(int &x) {
char ch=getchar();
int s=0,f=1;
while (!(ch>='0'&&ch<='9')) {
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9') {
s=(s<<3)+(s<<1)+ch-'0';
ch=getchar();
}
x=s*f;
}
vector<int> edge[MAXN] ;
int ins[MAXN] , low[MAXN] , dfn[MAXN] ;
int tot , whr[MAXN] ;
vector<pair<vector<int>,vector<int> > > scc ;
int deg[MAXN] ;
int n , m ;
void add(int u,int v){
edge[u].push_back(v) ;
}
void print(stack<int> s){
vector<int> sns ; sns.clear() ;
while(!s.empty()){
cerr<<s.top()<<" " ; s.pop() ;
}
cerr<<endl ;
}
stack<int> idx ;
vector<int> ptpuntil(int v , int wr){
//print(idx) ;
vector<int> nodes ;
while((!idx.empty())&&idx.top()!=v)
nodes.push_back(idx.top()) , whr[idx.top()] = wr , idx.pop() ;
nodes.push_back(idx.top()) , whr[idx.top()] = wr , idx.pop() ;
return nodes ;
}
int totally = 1 ;
void tarjan(int node){
dfn[node] = low[node] = ++totally ; ins[node] = 1 ; idx.push(node) ;
for(auto& i:edge[node]){
if(dfn[i]==0){
tarjan(i) ;
low[node] = min(low[node] , low[i]) ;
}
else if(ins[node]==1){
low[node] = min(low[node] , dfn[i]) ;
}
}
if(dfn[node]==low[node]){
//cout<<"NODE "<<node<<endl ;
scc.push_back(make_pair(ptpuntil(node,scc.size()),vector<int>())) ;
}
}
void _add(int a,int b){
if(a!=b) scc[a].second.push_back(b) ;
}
void join(){
//cerr<<"JOIN WORKS!"<<endl ;
//cerr<<"n = "<<n<<endl ;
for(int i=1;i<=n;++i)
for(auto& j : edge[i])
_add(whr[i],whr[j]) ;
for(auto& i : scc) sort(i.second.begin(),i.second.end()) , unique(i.second.begin(),i.second.end()) ;
}
void print(vector<int> V){
for(auto& i : V) cerr<<i<<" " ;
}
void print(vector<pair<vector<int> , vector<int> > > V){
int m = 0 ;
for(auto& i : V){
cerr<<"Vector No."<<++m<<":\n\tfirst :" ;
print(i.first) ;
cerr<<"\n\tsecond:" ;
print(i.second) ;
cerr<<endl ;
}
}
void answer(){
join() ;
//print(scc) ;
vector<int> zrs ;
zrs.clear() ;
for(int i=0;i<scc.size();++i){
if(!scc[i].second.size()) zrs.push_back(i) ;
//cout<<"PUSH "<<i<<endl ;
}
if(zrs.size()>1) printf("0\n") ;
else {
printf("%d\n",scc[*zrs.begin()].first.size()) ;
}
}
int main(){
read(n) , read(m) ;
for(int i=1;i<=m;++i){
int x , y ; read(x) , read(y) , add(x,y) ;
}
for(int i=1;i<=n;++i){
if(!dfn[i]) totally = 0 , tarjan(i) ;
}
answer() ;
}
题解【[HAOI2006]受欢迎的牛】的更多相关文章
- BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 【BZOJ1051】[HAOI2006]受欢迎的牛
[BZOJ1051][HAOI2006]受欢迎的牛 题面 bzoj 洛谷 题解 假如\(A\)喜欢\(B\)就连一条\(A\)到\(B\)的边 然后缩点,如果图不连通就\(Impossible\) 否 ...
- bzoj1051: [HAOI2006]受欢迎的牛(强联通)
1051: [HAOI2006]受欢迎的牛 题目:传送门 题解: 今天又做一道水题... 强联通啊很明显 水个模板之后统计一下每个强联通分量中点的个数,再统计一下出度... 不难发现:缩点之后当且仅当 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8172 Solved: 4470[Submit][Sta ...
- P2341 [HAOI2006]受欢迎的牛(更完)
P2341 [HAOI2006]受欢迎的牛 题解 tarjan 缩点板子题 如果 A 稀饭 B,那就 A 向 B 连边,构造出一个有向图 如果这个有向图里有强连通分量,也就说明这个强连通分量里的所有奶 ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- 1051: [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2276 Solved: 1190[Submit][Sta ...
- 【BZOJ】1051: [HAOI2006]受欢迎的牛
[HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢 ...
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
随机推荐
- 基础知识 SafeSEH DEP ASLR SEHOP
大多是0day书上抄的 1.SafeSEH 机制: 首先:内存中有SEH表的备份(加密过的) 在调用异常出来函数前,RtlDispatchException()函数中的行为: Ⅰ.检查异常处理链是否位 ...
- Si7006主要面向传统上使用的分立RH / T传感器的低精度的应用
Silicon Labs的Si7006 / 13/20/21个I 2 C相对湿度及温度传感器结合充分工厂校准湿度和温度传感器元件与模拟-数字转换器,信号处理和一个I 2 C主机接口.专利使用业界标准低 ...
- 九、SAP中使用定义时间及使用sy-uzeit取当前时间
一.sy-uzeit为取当前时间函数,类型t为时间类型,代码如下: 二.输出结果如下:
- 【转】ASP.NET Core 2.0中的HttpContext
ASP.NET Core 2.0中的HttpContext相较于ASP.NET Framework有一些变化,这边列出一些之间的区别. 在ASP.NET Framework中的 System. ...
- SQL分组后获取其中一个字段最大值的整条记录
SELECT * FROM( SELECT id,name,counts,createDate,row_number() OVER(partition BY name ORDER BY createD ...
- PWC6199:Generated servlet error:Only a type can be imported. org.apache.jasper.tagplugins.jstl.core.ForEach resolves to a package
<%@ import="org.apache.jasper.tagplugins.jstl.core.ForEach"%> 去掉这条语句,就不报错了.所以问题就出在这里 ...
- 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)
基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...
- Python基本数据类型之字符串
Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a ...
- 关于indexOf的用法
var fullTaskName = this.form.taskName; var index=fullTaskName.lastIndexOf("-"); ...
- 洛谷 P5662 纪念品
题目传送门 解题思路: 一道DP,完全背包,不过有点不同于模板.因为本题的每件物品可自由在不同的时间买卖,且不同时间价格不同. 这道题的关键在于要明白一个非常傻逼的性质,就是我在某天买了第i个物品,然 ...