LOJ-10091(强连通分量)
题目链接:传送门
思路:
多少头牛收到所有牛头牛的喜欢,喜欢具有传递性,所以将互相喜欢的牛视为一个点,就是有向图的
缩点,收到所有牛的喜欢要求这个“点”没有出度,所以缩点之后统计所有没有出度的点就是结果,如果有多头牛没有出度,
就说明图不连通,答案为0。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int maxn = ;
- int num[maxn],low[maxn],vis[maxn],head[maxn],ver[maxn],next[maxn],tot;
- int st[maxn],out[maxn],fa[maxn],top,tim,col;
- int MIN(int x,int y)
- {
- return x<y?x:y;
- }
- int MAX(int x,int y)
- {
- return x>y?x:y;
- }
- void Init()
- {
- memset(vis,,sizeof(vis));
- memset(low,,sizeof(low));
- memset(num,,sizeof(num));
- memset(head,,sizeof(head));
- memset(ver,,sizeof(ver));
- memset(next,,sizeof(next));
- memset(st,,sizeof(st));
- memset(out,,sizeof(out));
- memset(fa,,sizeof(fa));
- top=;tim=;tot=;col=;
- }
- void addedge(int u,int v)
- {
- ver[++tot]=v;next[tot]=head[u];head[u]=tot;
- }
- void Tarjan(int u) //强连通模板
- {
- low[u]=num[u]=++tim;
- vis[u]=;
- st[++top]=u;
- for(int i=head[u];i;i=next[i]){
- int v=ver[i];
- if(!vis[v]){
- Tarjan(v);
- low[u]=MIN(low[u],low[v]);
- }
- else if(!fa[v]) low[u]=MIN(low[u],num[v]);
- }
- if(low[u]==num[u]){
- fa[u]=++col;
- while(st[top]!=u){
- fa[st[top]]=col;
- top--;
- }
- top--;
- }
- }
- int main(void)
- {
- int n,m,i,j,x,y;
- while(~scanf("%d%d",&n,&m)){
- Init();
- for(i=;i<=m;i++){
- scanf("%d%d",&x,&y);
- addedge(x,y);
- }
- for(i=;i<=n;i++)
- if(!vis[i]) Tarjan(i);
- for(i=;i<=n;i++){
- for(j=head[i];j;j=next[j]){
- if(fa[i]!=fa[ver[j]]) out[fa[i]]++; //统计缩点后每个点的出度
- }
- }
- x=;
- int cnt=,sum=;
- for(i=;i<=col;i++)
- if(out[i]==) cnt++,x=i;
- if(cnt==){ //当且仅当只有一个“点”时才有结果
- for(i=;i<=n;i++) //统计这个缩点中的点数
- if(fa[i]==x) sum++;
- printf("%d\n",sum);
- }
- else printf("0\n");
- }
- return ;
- }
LOJ-10091(强连通分量)的更多相关文章
- Tarjan求强连通分量 缩点
强连通分量的定义: 在一张有向图中,如果两个点u,v之间能相互到达则称这两个点u,v是强连通的,在这个基础上如果有向图G中的任意两个顶点都强连通,那么称图G是一个强连通图.有向非强连通图的极大强连通子 ...
- 【题解】新型城市化 HAOI2017 网络流 二分图最大匹配 强连通分量
Prelude 好,HAOI2017终于会做一道题了! 传送到洛谷:→_→ 传送到LOJ:←_← 本篇博客链接:(●'◡'●) Solution 首先要读懂题. 考场上我是这样想的QAQ. 我们把每个 ...
- HDU5934 强连通分量
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5934 根据距离关系建边 对于强连通分量来说,只需引爆话费最小的炸弹即可引爆整个强连通分量 将所有的强连通分 ...
- POJ1236Network of Schools[强连通分量|缩点]
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16571 Accepted: 65 ...
- 有向图的强连通分量的求解算法Tarjan
Tarjan算法 Tarjan算法是基于dfs算法,每一个强连通分量为搜索树中的一颗子树.搜索时,把当前搜索树中的未处理的结点加入一个栈中,回溯时可以判断栈顶到栈中的结点是不是在同一个强连通分量中.当 ...
- Tarjan算法--强连通分量
tarjan的过程就是dfs过程. 图一般能画成树,树的边有三种类型,树枝边 + 横叉边(两点没有父子关系) + 后向边(两点之间有父子关系): 可以看到只有后向边能构成环,即只有第三张图是强连通分量 ...
- 强连通分量的一二三 | | JZOJ【P1232】 | | 我也不知道我写的什么
贴题: 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之 ...
- 有向图强连通分量的Tarjan算法
有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G ...
- poj2186Popular Cows(Kosaraju算法--有向图的强连通分量的分解)
/* 题目大意:有N个cows, M个关系 a->b 表示 a认为b popular:如果还有b->c, 那么就会有a->c 问最终有多少个cows被其他所有cows认为是popul ...
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)【转】【修改】
一.基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成 ...
随机推荐
- python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域
复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参: -- 形参:在函数定义时()中出现的参数 ...
- uni-app 使用 iconfont
使用 uni-app 做项目时需要用到 iconfont.和 web 使用略有差别.谨以此记录. 因为 uni-app 不能使用本地字体图标库,所以不能直接下载使用. 1.将iconfont中需要的图 ...
- jmiter性能测试
1. Jmeter简介Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测 ...
- Apache Flink 分布式运行时环境
Tasks and Operator Chains(任务及操作链) 在分布式环境下,Flink将操作的子任务链在一起组成一个任务,每一个任务在一个线程中执行.将操作链在一起是一个不错的优化:它减少了线 ...
- checkbox、radio控件和文字不对齐
一般使用html控件的时候 单选按钮和复选框的控件和文字不对齐 给input控件加上 style="vertical-align: middle; margin-top: -2px; ...
- H5(ionic2+VScode) 环境安装
一:node.js.npm.cnpm.cordova环境安装 介绍下概念 node.js 非阻塞异步的Ajax 操作基础框架. npm 国外的node.js 包管理器 cnpm 国内淘宝的node.j ...
- aop point-cut表达式
好多博客写的云里雾里,大多都有一点毛病.大家还是以官网为准 @官网文档 官网截图 modifiers-pattern:修饰符 ret-type-pattern:方法返回类型 declaring-typ ...
- Java多线程01(Thread类、线程创建、线程池)
Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...
- 12条MySQL优化技巧
应用程序慢,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系. 程序中嵌入的一行行的SQL ...
- laravel的路由分组,中间件,命名空间,子域名,路由前缀
laravel的路由分组,就是把一些具有相同特征的路由进行分组,比如一些路由需要进行验证,一些路由有共同的前缀,一些路由有相同的控制器命名空间等. 这样把路由组合在一起,方便管理,维护性更好. Rou ...