POJ 2186 Popular Cows——————(Kosaraju求强连通分量,缩点)

图论——强连通分量详解! 强连通分量等概念Tarjan算法的过程与实现就讲这么多,平时练习多注意vector与链式前向星的转换。今宵东方不见日,总有夜尽天明时。加油拜拜~~~(特意标红。。。 阅读详情

Popular Cows
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 42216 Accepted: 17135
Description

Every cow’s dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= 10,000) cows, you are given up to M (1 <= M <= 50,000) ordered pairs of the form (A, B) that tell you that cow A thinks that cow B is popular. Since popularity is transitive, if A thinks B is popular and B thinks C is popular, then A will also think that C is
popular, even if this is not explicitly specified by an ordered pair in the input. Your task is to compute the number of cows that are considered popular by every other cow.
Input

  • Line 1: Two space-separated integers, N and M

  • Lines 2…1+M: Two space-separated numbers A and B, meaning that A thinks B is popular.

Output

  • Line 1: A single integer that is the number of cows who are considered popular by every other cow.

Sample Input

3 3
1 2
2 1
2 3

Sample Output

1
Hint

Cow 3 is the only cow of high popularity.


// #include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<deque>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF  = 0x3f3f3f3f;
const int MAXN = 1e5+7;
int V;
int used[MAXN], cmp[MAXN];
vector<int>  G[MAXN];
vector<int> rG[MAXN];
vector<int> vs;

void add_edge(int x, int y)
{
        G[x].push_back(y);
        rG[y].push_back(x);
}

void dfs(int v)
{
        used[v] = true;
        for(int i=0;i<(int)G[v].size();++i)
                if(!used[G[v][i]])      dfs(G[v][i]);
        vs.push_back(v);
}
void rdfs(int v, int k)
{
        used[v] = true;
        cmp[v] = k;
        for(int i=0;i<(int)rG[v].size();++i)
                if(!used[rG[v][i]])     rdfs(rG[v][i],k);
}
int scc()
{
        memset(used, 0, sizeof(used));
        memset(cmp,  0, sizeof(cmp));
        vs.clear();
        for(int i=0;i<V;++i)
                if(!used[i])    dfs(i);
        memset(used, 0, sizeof(used));
        int k=0;
        for(int i=vs.size()-1; i>=0; --i)
                if(!used[vs[i]])    rdfs(vs[i], k++);
        return k;
}

int main()
{
        // freopen("../in.txt","r",stdin);
        // freopen("../out.txt","w",stdout);
        int N, M;
        while(cin>>N>>M)
        {
                V = N;
                for(int i=0;i<=N;++i)
                {
                        G[i].clear();
                        rG[i].clear();
                }
                int x,y;
                for(int i=0;i<M;++i)
                {
                        cin>>x>>y;
                        add_edge(x-1, y-1);
                }
                int n = scc();
                int num = 0;
                int u = 0;
                for(int i=0;i<V;++i)//拓扑序列最后的一个才有可能是可行解
                {
                        if(cmp[i]==n-1)
                        {
                                num++;
                                u = i;
                        }
                }
                memset(used, 0, sizeof(used));
                rdfs(u, 0);
                for(int i=0;i<V;++i)
                        if(!used[i])
                        {
                                num = 0;
                                break;
                        }
                cout<<num<<endl;

        }
        return 0;
}
强连通分量 Kosaraju算法 强连通分量 Kosaraju算法  伪代码(摘自Introduction to Algorithm 3rd Edition): Strongly_connected_components( G ) 1. call DFS(G) to compute finishing time u.f for each vertex u 2. compute GT 3. call DFS(GT), bu 阅读详情

相关推荐

链式前向星,kosaraju,Tarjan,Gabow算法的理解,POJ 2186 Popular Cows(强连通分量)

今天学习了下强连通分量。 主要有kosaraju,Tarjan两种算法 在实际过程中,数据结构选用链式前向星的方法更简单 预备: DFS可用来判断图中是否有环,展现无向图中的连通分支。 通过DFS,形成一个由多棵深度优先树所组成的深度优先森林。将原先图中的边添加到该森林之后,可以将所有边定义为以下四类: 1.    树边:森林中自带的边(即不在森林生成后,从原先图中添加的边)。

gg_gogoing的专栏 1626

强连通分量个数的求法(图解)

强连通分量个数的求法(图解) 背景 最近刷软考题的时候,碰到2013年上半年软件设计师的第31题,求程序图的环路复杂度。答案解析中有这么一段话: 根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出: V(G)=m−n+2p(∗)V(G)=m-n+2p(*)V(G)=m−n+2p(∗) 其中,V(G)是有向图G中的环路数,m是图G中弧的个数,n是图G中的结点数,p是图G中的强连通分量个数。 因为一直习惯了用V=m-n+2的公式计算,所以刚看到(*)公式时有点反应不过来,算是自己学习上的一个

weixin_38327135的博客 2万+

POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】

/* Popular Cows ( POJ No.2186) 每头牛都想成为牛群中的红人。给定 N 头牛的牛群和 M 个有序对(A, B)。 (A, B)表示牛 A 认 为牛 B 是红人。该关系具有传递性,所以如果牛 A 认为牛 B 是红人,牛 B 认为牛 C 是红人, 那么牛 A 也认为牛 C 是红人。不过,给定的有序对中可能包含(A, B)和(B, C),但不包含(A, C)。 求被其他所有牛

. 4万+

强连通分量的个数(Kosaraju)

【题目描述】 求一个有向图中强连通分量的个数。 【解题思路】 先解释一下强连通分量的定义: 一个有向图中,如果每两个点都相互连接(可以不直达),那么这个图就是一个强连通,我们可以把一个有向图分解成若干个强连通分量。 那么我们应该怎么做呢? 首先,从任意一个点开始遍历,记录每个点出栈的顺序。 原理,但我们对一个图进行dfs遍历的时候,我们从最深层开始出栈,如果我们把一个点的出度看作是通往下一层的话,那么我们最先出栈的肯定就是没有出度的了,当一个点的所有出度的点全部出栈了,那么我们也可以看作这个点的出度

FKJDASOI的博客 3576

有向图的强连通分量的求解

十字链表可以看成是将有向图的邻接表和逆邻接表结合起来得到的一种链表。在十字链表中,对应于有向图中每一条弧有一个结点,对应于每一个顶点也有一个结点。然后建立有向图,然后利用深度优先遍历求解强连通分量

S32K144 ADC硬件触发实战:PDB模块配置与DMA传输全流程解析

本文详细解析了S32K144微控制器中ADC硬件触发的全流程实现。通过配置PDB模块产生精确的定时触发信号,并联动DMA实现转换数据的自动搬运,构建了一个无需CPU干预的高效、低抖动数据采集系统。文章深入讲解了时钟配置、模块初始化、DMA引擎搭建及实战调试技巧,为汽车电子和工业控制应用提供了可靠的解决方案。

weixin_29174141的博客 225

强连通分量

强连通分量@(算法学习)首先明白,这个概念是在有向图中的,其次是,如何有效寻找。图中强连通分量的个数是:4个。分析: 强连通分量的定义:有向图中,如果两个顶点vi,vjv_i,v_j之间存在: viv_i到vjv_j的路径 vjv_j到viv_i的路径 则称这两个顶点是强连通的。至于相对的弱连通,则抹去方向,相连即可。那么,道理很简单,如何应用呢?答案是先找回路,然后在回路的基础上,扩展结点。因为

Bing's Blog 2865

Mac微信聊天记录备份终极指南:用软链接轻松迁移到外接硬盘(附重签名教程)

本文详细介绍了如何通过软链接技术将Mac微信聊天记录备份迁移到外接硬盘,解决内置存储空间不足的问题。教程包括备份文件定位、软链接创建及微信重签名步骤,帮助用户高效管理微信数据,释放Mac存储空间。

uuu88的博客 1163

强连通分量(tarjan算法)

强连通:两个点u,v可以互相到达强连通分量,一个图中每一块的任意点可以互相到达的数量(不一定整个图强连通,但是局部强连通)

WQhuanm的博客 3759

高德地图轨迹回放,消息框内展示车辆速度且随车辆移动-升级支持调整速度、回放进度

使用高德地图回放车辆GPS轨迹,并添加速度和回放进度条,并支持调整,效果如下: 新增的功能: 在基础版本,有如下升级 速度条:可以拖动以调整车辆回放速度,且从当前位置继续回放 进度条:进度条表示车辆已回放的百分比,且拖动进度条车辆定位到相应的位置并继续回放 ###思路分析 高德和marker回放相关的API //主要靠他回放 moveAlong(path:Array,speed:Number,f:Function,circlable:Boolean) //点移动到另一个位置,移动进度条车辆跟随移动

博客 1万+

Excel数字变成了小数点+E+17?这些方法帮你解决!

本文介绍了三种解决Excel中数字变成小数点+E+17问题的方法:通过下拉箭头或右键菜单设置单元格格式为文本、使用TEXT函数将科学计数法转换为文本。这些方法各有优缺点,适用于不同的场景和需求。在实际应用中,我们可以根据具体情况选择合适的方法来解决问题。通过以上方法,我们可以轻松地从繁琐的小数点+E+17问题中解脱出来,更便捷地处理Excel中的数字。希望本文能够帮助到您,让您在使用Excel时更加得心应手!

nntxthml的博客 1245

POJ 2186 Popular Cows Kosaraju求强联通分量

POJ 2186 Popular Cows 强联通分量 题目链接: POJ 2186 Popular Cows  题意:给定N个顶点M条边的有向图。边具有传递性。如A到B连通,B到C连通,那么A到C也是连通的。求有多少个顶点满足其他所有顶点到该顶点都连通。 思路:先求出强联通分量,缩点,强连通分量内所有的点都是相互连通的,然后所有的缩点构成一个DAG(有向无环图),如果图中要存在顶点满足

Fighting! 918

告别串口升级!手把手教你为STM32H750的W25Q32制作MDK下载算法(QSPI篇)

本文详细介绍了为STM32H750的W25Q32制作MDK下载算法(QSPI篇)的完整流程,帮助开发者告别低效的串口烧录方式。通过定制下载算法,可实现20倍以上的烧录速度提升,支持完整的调试功能,显著提高开发效率。文章涵盖环境准备、核心算法实现、性能优化及常见问题解决方案,适合嵌入式开发者参考。

weixin_30735745的博客 403

POJ2186 Popular Cows Kosaraju

题目大意是:在一个牧群中,有N个奶牛,给定M对关系(A,B)表示A仰慕B,而且仰慕关系有传递性,问被所有奶牛(除了自己)仰慕的奶牛个数 因为仰慕关系具有传递性,因此在一个强连通分量中,每个奶牛都被分量中的其他奶牛膜拜,而且也膜拜着分量中的其他奶牛,这种互相膜拜的场景在现实生活中也是经常存在的,因此,本题可以将强连通分量缩点,并构造新图,最后做一次扫描,统计出度为0的点的个数,如果正好为1

Free Loop~~~跳动的音符 690

Moviepy自动化剪辑视频中的广告

本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。

Mr数据杨 3411

Vue/React动态页面爬取:不用Playwright也能抓全数据的3个JS逆向技巧(附Python代码)

Vue/React动态页面的爬取核心是“绕过渲染,直达数据”:90%的场景下,API接口或初始数据足以满足需求,Playwright等渲染工具只应作为“最后手段”(如无API、参数加密极复杂)。记住:爬虫的效率与“模拟真实浏览器的程度”成反比——越少模拟浏览器,效率越高。掌握JS逆向技巧,既能避开Playwright的性能坑,又能提升爬虫的抗反爬能力,这才是动态页面爬取的最优解。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1597

POJ-2186 Popular Cows (强连通分量[Kosaraju])

初次接触这方面的图论,知道的太少了,还不能看出如何转换,只能根据题解慢慢学习 要做这题首先得了解一个定理:DAG中唯一出度为0的点,一定可以由任何点出发均可达(由于无环,所以从任何点出发往前走,必然终止于一个出度为0的点) 可以先求出所有的强连通分量,并且将强连通分量缩成一个点,寻找出度为0的缩点,若其个数大于1,则有0个点满足题意;若其个数等于1,则缩点中所有的点都满足题意

idealism_xxm的专栏 528

【异常】Cursor导入Karpathy指南失败解决方案Failed to import GitHub/GitLab rules: Error executing git: Cloning into

摘要:本文解决了Git克隆单个文件报错的问题,指出git clone只能克隆整个仓库而非单个文件。提供了两种解决方案:1) 推荐手动创建规则文件,在Cursor项目中新建.mdc文件并粘贴Karpathy行为指南完整内容;2) 备选克隆整个仓库获取文件。指南包含编码行为规范,强调简单性、精准修改和明确目标。还说明了如何设置全局规则和即时生效的方法。

奶爸的编程之路,也就一周冷个三天 174

POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】

Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23445   Accepted: 9605 Description Every cow's dream is to become the most popular cow in the

长风的专栏 3505

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ 2186 Popular Cows 强连通分量(Kosaraju)

点击打开链接 题意:n个点m条边的有向图,n,m 直接暴力 从每个点出发 更新每个点的到达次数 最坏为O(NM) TLE 如果A为合法 B也为合法 则A,B显然能互相到达 即A,B在同一个强联通分量中 如果某个强连通分量中存在点A合法 则显然该强连通分量内所有的点也都合法. 则分解出强联通分量 缩点后 变为DAG 显然只要判断所有点是否能到达,拓扑序中最后一个强联通分量上即可

Masamiiiiii 460

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

poj 2186 Popular Cows(强连通分量,tarjan或Kosaraju)

题目地址:点击打开链接 题意: 给定一些有向路,求有多少个点可以由其余的任意点到达 思路: 第一道强连通分量题,照着白书写的。 最后判断拓扑排序最后一个强连通分量是否可行看到两种方法,白书是对最后一个连通分量再逆向dfs一遍,验证是否所有点都能到达;看到网上大多的解法是计算每个连通分量的出度,若当且仅当出度为0的只有1个才符合。 代码:

CillyB的博客 853

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

poj 2186 Popular Cows Kosaraju求强连通分量

题意:有一群牛,每对牛之间可以有崇拜关系,同时,崇拜关系满足传递性。问被除自己以外的所有牛崇拜的牛有多少头? 第一次做强连通分量的题。这道题想想其实很简单。 思路:先按题意建图,显然,每个强联通分量中的牛都是相互崇拜的,所以我们把所有强连通分量找出来,然后把它们都看成一个点。两个强连通分量之间如果存在边,则必存在边(V1,V2)∈E,其中V1∈强连通分量1, V2∈强连通分量2。点有了

Pekary 519

求解有向图的强连通分量的SCC问题---POJ 2186 Popular Cows

【SCC问题】 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected),如果有向图G的每两个顶点都强连通,称G是一个强连通图.通俗的说法是:从图G内任意一个点出发,存在通向图G内任意一点的的一条路径. 非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components,SCC). 求图强连通分量的意

Keaper的博客 4752

[kosaraju算法] POJ 2186 Popular Cows

题面 link   给定一个有向图,问有几个结点,图中的任意结点都可以到达?(1≤n≤1e41≤ n ≤ 1e41≤n≤1e4) 分析   若是知道了图中的强连通分量,将一个强连通分量缩成一个点的话,那么原图可以变成是一个DAG(有向无环图)。若是只有一个结点出度为0,那么其它结点都可以到达这个点;若是有大于一个,那么就不存在任何结点都可以到达的点了。   所以我们可以用 kosaraju 算法求出强连通分量,进行缩点,然后求出出度为0的缩点判断答案。   kosaraju算法的步骤是:①正向建图和反向建图

ECNU_SF的博客 192

强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且可以传递, 即1欢迎2不代表2欢迎1, 但是如果2也欢迎3那么1也欢迎3。 求被所有牛都欢迎的牛的数量。 限制: 1 1 思路: Kosaraju算法, 看缩点后拓扑序的终点有多少头牛, 且要判断是不是所有强连通分量都连向它。 Kosaraju

whai的专栏 1021

POJ 2186-Popular Cows:强连通分量问题

点击打开链接 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19665   Accepted: 7970 Description Every cow's dream is to become the most pop

云淡风清 1142
上一篇: HDU 1269迷宫城堡——————强连通模板(Kosaraju算法)
下一篇: HDU 1827 Summer Holiday——————(Kosaraju求强连通分量,缩点)
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值