bzoj1051(明星奶牛)

本文详细解析了明星奶牛问题的解决方法,采用强连通分量缩点算法,通过Tarjan算法寻找强连通分量,并重构图来确定出度为0的块,最终输出符合条件的块大小。

这道就是明星奶牛,A了一次又一次了,(⊙o⊙)…(⊙o⊙)…

去年pas就打了不下5次,就是强联通缩点,然后求出度为0的块

判断有多个的话就无解,一个就输出块的大小。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 const int NN=1e4+7,MM=NN*5;
 9 
10 int n,m,Time=0,top=0,scc=0,ans;
11 int dfn[NN],low[NN],instack[NN],q[NN],belong[NN],chu[NN];
12 int cnt=0,head[NN],next[MM],rea[MM],skt[NN];
13 
14 void add(int u,int v)
15 {
16     cnt++;
17     next[cnt]=head[u];
18     head[u]=cnt;
19     rea[cnt]=v;
20 }
21 void tarjan(int u)
22 {
23     low[u]=dfn[u]=++Time;
24     q[++top]=u,instack[u]=1;
25     for (int i=head[u];i!=-1;i=next[i])
26     {
27         int v=rea[i];
28         if (dfn[v]==0)
29         {
30             tarjan(v);
31             low[u]=min(low[v],low[u]);
32         }
33         else if (instack[v]) low[u]=min(low[u],dfn[v]);
34     }
35     if (low[u]==dfn[u])
36     {
37         scc++;
38         int x=-1;
39         while (x!=u)
40         {
41             x=q[top--];
42             instack[x]=0;
43             belong[x]=scc;
44             ++skt[scc];
45         }
46     }
47 }
48 void rebuild()
49 {
50     for (int u=1;u<=n;u++)
51     {
52         for (int i=head[u];i!=-1;i=next[i])
53         {
54             int v=rea[i];
55             if (belong[u]!=belong[v]) chu[belong[u]]=1;
56         }
57     }
58     int num=0,x=0;
59     for (int i=1;i<=scc;i++)
60         if (chu[i]==0) num++,x=i;    
61     if (num!=1) ans=0;
62     else ans=skt[x];
63     printf("%d",ans);
64 }
65 int main()
66 {
67     scanf("%d%d",&n,&m);
68     int x,y;
69     memset(head,-1,sizeof(head));
70     for (int i=1;i<=m;i++)
71     {
72         scanf("%d%d",&x,&y);
73         add(x,y);
74     }
75     for (int i=1;i<=n;i++)
76         if (dfn[i]==0) tarjan(i);
77     rebuild();    
78 }

 

转载于:https://www.cnblogs.com/fengzhiyuan/p/7429704.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值