[vios1023]维多利亚的舞会3<强联通分量tarjan>

题目链接:https://vijos.org/p/1023

最近在练强联通分量,当然学的是tarjan算法

而这一道题虽然打着难度为3,且是tarjan算法的裸题出没在vijos里面

但其实并不是纯粹只需要tarjan求有几个强联通就可以过的(我以为这是所谓的裸题)

其实这题还需要对每一个强联通缩点,可能被所谓裸题误导的OIer们看不破这个

毕竟,这个样例数据也是坑啊,样例数据都可以说是无向图了,哪里还是什么有向图

所以样例数据不是万能的,但是没过样例数据是万万不能的

至于为什么缩点我们来想一想,这张图中,怎么才满足可以被通知到

是在一个强联通分量里面?还是有一条边相连?还是有别的人指向他?

当然可以想到是有人指向他,这样就可以排除求出强联通分量个数的方法。。

不过我们可以确认的是,在一个强联通分量的点,只需要一个点就可以把这个强联通分量通知完,然后我们就可以判断任意两个强联通分量有没有可能有联系,也就是刚刚提到的有没有指向这个强联通分量的其他分量,也就是有没有入度。如果有入度,我们就可以把这个强联通分量与另一个合并,也就是这两个分量只要一个人就可以通知完。由于在这里理解成强联通分量会有些麻烦,所以就是所谓的缩点,把这个强联通分量看成一个点再来找边和入度

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<cmath>
 5 #include<queue>
 6 #include<stack>
 7 #include<algorithm>
 8 #include<cstdlib>
 9 #define maxn 205
10 using namespace std;
11 
12 struct node{
13     int u,v,w,nxt;
14 }e[maxn*maxn];
15 
16 int head[maxn],dfn[maxn],low[maxn],belong[maxn];
17 int num,tot,n,m,k,ans,in[maxn],cnt;
18 stack<int >s;
19 
20 void adde(int u,int v){
21     e[++tot].u=u;
22     e[tot].v=v;
23     e[tot].nxt=head[u];
24     head[u]=tot;
25 }
26 
27 void tarjan(int u){
28     num++;
29     dfn[u]=low[u]=num;
30     s.push(u);
31     for(int i=head[u];i!=-1;i=e[i].nxt){
32         int v=e[i].v;
33         if(dfn[v]==0){
34             tarjan(v);
35             low[u]=min(low[u],low[v]);
36         }else{
37             if(!belong[v])low[u]=min(low[u],dfn[v]);
38         }
39     }
40     if(dfn[u]==low[u]){
41         ans++;
42         belong[u]=ans;
43         while(s.top()!=u){
44             belong[s.top()]=ans;
45             s.pop();    
46         }s.pop();
47     }
48 }
49 
50 int main(){
51     memset(head,-1,sizeof(head));
52     scanf("%d",&n);
53     for(int i=1;i<=n;i++){
54         int a;scanf("%d",&a);
55         while(a!=0){
56             adde(i,a);scanf("%d",&a);}
57     }
58     for(int i=1;i<=n;i++){
59         if(dfn[i]==0)tarjan(i);
60     }
61     for(int i=1;i<=tot;i++){
62         int u=e[i].u,v=e[i].v;
63         if(belong[u]!=belong[v]){
64             in[belong[v]]++;
65         }
66     }
67     for(int i=1;i<=ans;i++){
68         if(!in[i])cnt++;
69     }
70     printf("%d",cnt);
71 }
View Code

【总结】

样例数据是万能的,不能过于相信样例,但是样例错了那就肯定错了

 

 

(另外,之前看见有人说原本想并查集但是错了,我个人没有想通为何不能简单的用并查集来偷懒,希望大佬能指点我一番)

转载于:https://www.cnblogs.com/Danzel-Aria233/p/7774694.html

标题基于Python的高校岗位招聘和分析平台研究AI更换标题第1章引言介绍高校岗位招聘的现状、问题以及Python在分析平台中的应用。1.1研究背景与意义分析高校岗位招聘的重要性及其面临的挑战。1.2国内外研究现状探讨当前国内外在高校岗位招聘分析方面的研究进展。1.3研究方法与论文结构简述本文的研究方法,并概述论文的整体结构。第2章相关理论与技术总结高校岗位招聘分析所涉及的理论框架与关键技术。2.1数据挖掘与信息处理讨论数据挖掘技术在高校岗位招聘中的应用。2.2Python编程语言及其优势阐述Python在数据处理与分析方面的优势和特点。2.3相关算法与模型介绍用于招聘数据分析的主要算法和模型。第3章平台需求分析与设计详细分析高校岗位招聘和分析平台的需求,并设计相应的功能模块。3.1平台需求分析深入探讨平台需要满足的用户需求和业务需求。3.2平台架构设计提出平台的整体架构设计,包括前后端分离、数据库设计等。3.3功能模块设计详细介绍平台的各个功能模块,如数据采集、数据预处理、数据分析与可视化等。第4章平台实现与测试具体阐述平台的实现过程,并进行详尽的测试以确保平台的稳定性和可靠性。4.1平台实现详细描述平台的实现细节,包括关键代码的实现、模块之间的交互等。4.2平台测试对平台进行全面测试,包括功能测试、性能测试、安全测试等。第5章平台应用与效果评估将平台应用于实际的高校岗位招聘中,并对其效果进行评估和分析。5.1平台应用案例列举平台在高校岗位招聘中的具体应用案例。5.2效果评估指标体系构建用于评估平台效果的指标体系,如招聘效率提升、招聘成本降低等。5.3评估结果与分析根据评估指标体系对平台应用效果进行量化分析,并给出结论。第6章结论与展望总结本文的研究成果,并展望未来的研究方向和改进措施。6.1研究结论概括本文关于高校岗位招聘和分析平台的主要研究结论。6.2展望与改进提出对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值