板子题
缩点找出入度为0的点 即可
第二问 max(p,q)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <bits/stdc++.h> using namespace std ; const int N=103; vector< int > g[N],graph[N]; int n,pool,dfn[N],low[N], in [N], out [N] ; int col[N],cl; stack< int > st ; void tarjan( int x) { dfn[x]=low[x]=++pool; st.push(x); int y,i; for (i=0;i<g[x].size();i++){ y=g[x][i]; if (dfn[y]==0) tarjan(y),low[x]=min(low[x],low[y]); else if (col[y]==0) low[x]=min(low[x],dfn[y]); } if (low[x]==dfn[x]){ ++cl; do { y=st.top(); st.pop(); col[y]=cl; } while (x!=y); } } signed main(){ int i,j,x,y,c1=0,c2=0; cin>>n; for (i=1;i<=n;i++) while (cin>>j,j) g[i].push_back(j); for (i=1;i<=n;i++) if (dfn[i]==0) tarjan(i); for (i=1;i<=n;i++) for (j=0;j<g[i].size();j++){ x=col[i],y=col[g[i][j]]; if (x!=y) graph[x].push_back(y), in [y]++, out [x]++; } for (i=1;i<=cl;i++){ if ( in [i]==0) c1++; if ( out [i]==0) c2++; } if (cl==1) cout<<1<<endl<<0; else cout<<c1<<endl<<max(c1,c2); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!