bzoj 1051 [HAOI2006]受欢迎的牛(tarjan缩点)
2024-10-06 10:54:12
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1051
题解:缩点之后判断出度为0的有几个,只有一个那么输出那个强连通块的点数,否者就输出0
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
const int N = 1e6 + 10;
const int M = 5e6 + 10;
map<int,int>mmp[N];
struct TnT {
int v, next;
}edge[M];
int head[N], e;
int Low[N], DFN[N], Stack[N], Belong[N], num[N];
int Index, top, scc;
int Out[N];
bool Instack[N];
void init() {
memset(head, -1, sizeof(head));
e = 0;
}
void add(int u, int v) {
edge[e].v = v;
edge[e].next = head[u];
head[u] = e++;
}
void Tarjan(int u) {
int v;
Low[u] = DFN[u] = ++Index;
Stack[top++] = u;
Instack[u] = true;
for(int i = head[u]; i != -1; i = edge[i].next) {
v = edge[i].v;
if(!DFN[v]) {
Tarjan(v);
Low[u] = min(Low[u] , Low[v]);
} else if(Instack[v]) Low[u] = min(Low[u] , DFN[v]);
}
if(DFN[u] == Low[u]) {
scc++;
do {
v = Stack[--top];
Instack[v] = false;
Belong[v] = scc;
num[scc]++;
} while(v != u);
}
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
init();
for(int i = 0; i < m; i++) {
int a, b;
scanf("%d%d", &a, &b);
if(mmp[a][b] != 1) {
mmp[a][b] = 1;
add(a , b);
}
}
memset(DFN, 0, sizeof(DFN));
memset(Low, 0, sizeof(Low));
memset(Instack, false, sizeof(Instack));
memset(num, 0, sizeof(num));
for(int i = 1; i <= n; i++) {
if(!DFN[i]) Tarjan(i);
}
for(int i = 1; i <= n; i++) {
for(int j = head[i]; j != -1; j = edge[j].next) {
int v = edge[j].v;
if(Belong[i] != Belong[v]) Out[Belong[i]]++;
}
}
int ans = 0 , pos = -1;
for(int i = 1; i <= scc; i++) {
if(Out[i] == 0) {ans++, pos = i;}
}
if(ans > 1) printf("0\n");
else printf("%d\n" , num[pos]);
return 0;
}
最新文章
- jqGrid实现当前页列合计与总计
- 读书摘要,Hackable Projects
- 使用-MM生成include指令和依赖生成(make include directive and dependency generation with -MM)
- Git教程学习(五)
- C# 结构体
- SQL Server 的SQL基础知识
- golang.org/x/mobile/exp/gl/glutil/glimage.go 源码分析
- [转]Linux read用法
- How Tomcat Works(六)
- 动态网页技术---JSP
- 4 C#和Java 的比较
- 【转】Windows环境下.NET 操作Oracle问题
- Python中Celery 的基本用法以及Django 结合 Celery 的使用和实时监控进程
- 【性能提升神器】Covering Indexes
- Java并发编程笔记之基础总结(一)
- 【第196期】Drupal7 Features模块与 Drupal8 Configuration Management 模块对比
- c# 操作文本文件
- 2018.11.07 NOIP训练 L的鞋子(权值分块+莫队)
- Kubernetes中的资源调度与资源管理
- git 忽略不提交的文件3种情形