蜜汁WA两个点

P2746 [USACO5.3] 校园网Network of Schools

```cpp #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include<vector> #include<algorithm> using namespace std; #define MAX 101 #define MAXL 10001 int h[MAX],cnt=0; int Dfn[MAX],Low[MAX],Be[MAX]; bool vis[MAX]; int Time=0,top=0,Group=0,n; int S[MAX];//栈 int In[MAX],Out[MAX]; vector<int> G[MAX]; struct Node { int v; int next; }e[MAXL*2]; void Add(int u,int v) { e[cnt]=(Node){v,h[u]}; h[u]=cnt++; } void Tarjan(int u) { ++Time; Dfn[u]=Low[u]=Time; S[++top]=u; vis[u]=true; int v; for(int i=h[u];i!=-1;i=e[i].next) { v=e[i].v; if(!Dfn[v]) { Tarjan(v); Low[u]=min(Low[u],Low[v]); } else if(vis[v]) Low[u]=min(Low[u],Dfn[v]); } if(Low[u]==Dfn[u]) { ++Group; v=-1; while(v!=u) { v=S[top--]; vis[v]=false; G[Group].push_back(v); Be[v]=Group; } } } int main() { int a; memset(h,-1,sizeof(h)); cin>>n; for(int i=1;i<=n;++i) while(cin>>a&&a) Add(i,a); for(int i=1;i<=n;++i) if(!Dfn[i]) Tarjan(i); if(Group==1) { cout<<1<<endl<<0<<endl; return 0; } for(int i=1;i<=n;++i) { for(int j=h[i];j!=-1;j=e[j].next) { if(Be[i]!=Be[e[j].v]) { In[Be[e[j].v]]++; Out[Be[i]]++; } } } int ans1=0,ans2=0; for(int i=1;i<=Group;++i) { if(Out[i]==0) ++ans1; if(In[i]==0) ++ans2; } cout<<ans2<<endl<<max(ans2,ans1)<<endl; //cout<<Group<<endl; return 0; } ```
by yybyyb @ 2017-06-06 15:20:29


所以问题在哪里呢
by walk_alone @ 2018-11-01 18:52:18


|