tarjan模板只有50分,求助

P2863 [USACO06JAN] The Cow Prom S

正确代码: ```cpp #include<iostream> #include<vector> #include<queue> #include<cstring> #include<stack> using namespace std; int index1,dfn[10000001],low[1000001],h,s[100001],n,m,x,y,z,k; bool instack[1000001],vis[10001]; vector<int> g[100001]; stack<int> q; void tarjan(int u){ dfn[u]=low[u]=++index1; q.push(u); vis[u]=true; instack[u]=true; for(int i=0;i<g[u].size();i++) { int v=g[u][i]; if(!dfn[v]){ tarjan(v); low[u]=min(low[u],low[v]); }else{ if(instack[v]==true) { low[u]=min(low[u],dfn[v]); } } } if(dfn[u]==low[u]){ h=0; int v; do{ h++; v=q.top(); q.pop(); //s[v]=h; instack[v]=false; } while(u!=v); if(h>1)k++; } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x>>y; g[x].push_back(y); } for(int i=1;i<=n;i++){ if(!instack[i]){ tarjan(i); } } cout<<k; }
by 帅鹏 @ 2021-08-10 10:39:28


|