求dalao看一下思路对没对qwq

P1983 [NOIP2013 普及组] 车站分级

```cpp //解决了...QAQ #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> #define QAQ main using namespace std; const int maxn=1000+5; int n,m; bool g[maxn][maxn]; int d[maxn]; struct Node{ int num; int level; }edge; queue<Node> que; int ans=0; void init(){ memset(g,0,sizeof(g)); memset(d,0,sizeof(d)); while(!que.empty()) que.pop(); scanf("%d%d",&n,&m); for(int lll=1;lll<=m;lll++){ int h[maxn],l[maxn]; memset(h,0,sizeof(h)); memset(l,0,sizeof(l)); scanf("%d",&h[0]); for(int i=1;i<=h[0];i++) scanf("%d",&h[i]); l[0]=1; for(int i=1;i<=h[0];i++) for(int j=h[i]+1;j<h[i+1];j++) l[l[0]++]=j; for(int i=1;i<=h[0];i++) for(int j=1;j<=l[0];j++) if(g[h[i]][l[j]]==false){ g[h[i]][l[j]]=true; d[l[j]]++; } } } void qwq(){ for(int i=1;i<=n;i++) if(d[i]==0){ edge.num=i; edge.level=1; que.push(edge); } while(!que.empty()){ if(ans<que.front().level) ans++; for(int i=1;i<=n;i++) if(g[que.front().num][i]){ d[i]--; if(d[i]==0){ edge.num=i; edge.level=que.front().level+1; que.push(edge); } } que.pop(); } printf("%d\n",ans); } int QAQ(){ init(); qwq(); return 0; } ```
by DavidLI @ 2017-10-16 20:25:11


然而你的过程名已经成功引起了我的注意
by 蒻得不行 @ 2017-11-07 22:57:40


|