40分求助

P2863 [USACO06JAN] The Cow Prom S

``` #include<iostream> #include<cstdio> #include<vector> #include<stack> using namespace std; int n,m,x,y,t,dfn[10001],low[10001],time,v,f[10001],num,d[10001],ans; bool visit[10001],instack[10001]; vector<int>a[10001]; stack<int>s; void tarjan(int u){ dfn[u]=low[u]=++time; visit[u]=1;s.push(u);instack[u]=1; for(int j=0;j<a[u].size();j++){ v=a[u][j]; if(visit[v]==0){ tarjan(v); low[u]=min(low[u],low[v]); } else if(instack[v]){ low[u]=min(low[u],dfn[v]); } } num=0; if(dfn[u]==low[u]){ do{ t=s.top();s.pop();instack[t]=0;num++; }while(t!=u); if(num>1){ ans++; } } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x>>y; f[x]=f[y]=1; a[x].push_back(y); } for(int i=1;i<=n;i++){ if(!dfn[i]) tarjan(i); } cout<<ans<<endl; return 0; } ```
by 九八七六 @ 2018-07-12 17:38:02


|