【BZOJ】【1051】【HAOI2005】受欢迎的牛
2024-09-09 14:48:45
按B->A连边,tarjan缩点,然后找入度为0的连通分量,如果有1个,则ans=size[i],如果大于一个则ans=0;
当然如果按A->B连边就是找出度为0的(表示没有被它喜欢的,这样的连通分量才有可能所被所有的喜欢)
/**************************************************************
Problem: 1051
User: Tunix
Language: C++
Result: Accepted
Time:52 ms
Memory:2308 kb
****************************************************************/ //BZOJ 1051
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
const int N=; void read(int &v){
v=;int sign=; char ch=getchar();
while(ch<'' || ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){v=v*+ch-''; ch=getchar();}
v*=sign;
}
/****************tamplate***********************/
int n,m;
int head[N],to[N*],next[N*],cnt;
void add(int a,int b){
to[++cnt]=b; next[cnt]=head[a]; head[a]=cnt;
}
int dfn[N],low[N],belong[N],du[N],dfs_clock,size[N],SCC;
bool inst[N];
int st[N],top;
void tarjan(int x){
int y;
dfn[x]=low[x]=++dfs_clock;
st[top++]=x;
inst[x]=;
for(int i=head[x];i;i=next[i]){
y=to[i];
if (!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if (inst[y]) low[x]=min(low[x],dfn[y]);
}
if (dfn[x]==low[x]){
SCC++;size[SCC]=;
for(y=;y!=x;){
y=st[--top];
inst[y]=;
belong[y]=SCC;
size[SCC]++;
}
}
}
void rebuild(){
F(x,,n)
for(int i=head[x];i;i=next[i])
if (belong[x]!=belong[to[i]]) du[belong[to[i]]]++;
}
/***********************************************/
int main(){
read(n); read(m);
int a,b;
F(i,,m){
read(a); read(b);
add(b,a);
}
F(i,,n) if (!dfn[i]) tarjan(i);
rebuild();
int ans=;
if (SCC==) ans=n;
else{
int tot=;
F(i,,SCC) if (du[i]==) {tot++; ans=size[i];}
if (tot>) ans=;
}
printf("%d\n",ans);
return ;
}
最新文章
- 基于 Asp.Net的 Comet 技术解析
- 让你的网站免费支持 HTTPS 及 Nginx 平滑升级
- 实用SQL语句大全
- Js~(function(){})匿名自执行方法的作用
- Power Gating的设计(架构)
- C 记录
- oracle的触发器
- Matlab 取子矩阵
- elasticsearch-5.0.0初见
- bzoj[1835][ZJOI2010]base 基地选址
- [Swift]LeetCode402. 移掉K位数字 | Remove K Digits
- API防重放机制
- PLA-1
- Deep Neural Networks for Object Detection(翻译)
- 问题 C: Frosh Week(2018组队训练赛第十五场)(签到)
- token和盐
- awt
- python去重(针对密码)
- 随机生成三个数(break用法)
- Android Studio 增加按钮响应事件