三亚市网站建设_网站建设公司_GitHub_seo优化
2026/1/9 20:04:48 网站建设 项目流程

P2863 [USACO06JAN] The Cow Prom S

题目描述

有一个nnn个点,mmm条边的有向图,请求出这个图点数大于111的强连通分量个数。

输入格式

第一行为两个整数nnnmmm

第二行至m+1m+1m+1行,每一行有两个整数aaabbb,表示有一条从aaabbb的有向边。

输出格式

仅一行,表示点数大于111的强连通分量个数。

输入输出样例 #1

输入 #1

5 4 2 4 3 5 1 2 4 1

输出 #1

1

说明/提示

数据规模与约定

对于全部的测试点,保证2≤n≤1042\le n \le 10^42n1042≤m≤5×1042\le m\le 5\times 10^42m5×1041≤a,b≤n1 \leq a, b \leq n1a,bn

C++实现

#include<bits/stdc++.h>#definemaxn10001usingnamespacestd;vector<int>G[maxn];stack<int>s;intn,m;intdfn[maxn],used[maxn],vis[maxn],low[maxn],color[maxn],num[maxn],colornum=0,cnt=0,ans=0;voidpaint(intx){s.pop();color[x]=colornum;num[colornum]++;vis[x]=false;}voidtarjan(intx){dfn[x]=low[x]=++cnt;s.push(x);vis[x]=used[x]=true;for(inti=0;i<G[x].size();i++){intq=G[x][i];if(!dfn[q]){tarjan(q);low[x]=min(low[x],low[q]);}elseif(vis[q])low[x]=min(low[x],dfn[q]);}if(low[x]==dfn[x]){colornum++;while(s.top()!=x){intt=s.top();paint(t);}paint(x);}}intmain(){cin>>n>>m;for(inti=1;i<=m;i++){intu,v;cin>>u>>v;G[u].push_back(v);}for(inti=1;i<=n;i++){if(!used[i])tarjan(i);}for(inti=1;i<=colornum;i++){if(num[i]>1)ans++;}cout<<ans;return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询