这是要逼我女装?

P1983 [NOIP2013 普及组] 车站分级

这题不是拓扑吗
by hanjicheng @ 2018-09-28 17:06:55


@[hanjicheng](/space/show?uid=56986) 对啊,我上面写的就是拓扑
by info___tion @ 2018-09-28 17:07:38


刚刚把数据下了下来,发觉可能是读入的速度问题
by info___tion @ 2018-09-28 17:08:26


对不起,眼花了。 我再看一下代码
by hanjicheng @ 2018-09-28 17:09:35


我用的是深搜,你可以试试
by hanjicheng @ 2018-09-28 17:13:37


https://www.luogu.org/record/show?rid=4221254
by hanjicheng @ 2018-09-28 17:14:12


# register试试
by wxy_god @ 2018-09-28 17:16:16


@[我是一个垃圾](/space/show?uid=89396) 醒醒,都 8012 年了
by memset0 @ 2018-09-28 17:21:33


@[memset0](/space/show?uid=53495) 嗯
by wxy_god @ 2018-09-28 17:23:29


用了register,inline,更慢了…… ```cpp #include<stdio.h> #define max(x,y) (x)>(y)?x:y const int maxn=1002; bool Map[maxn][maxn]; int a[maxn]; bool table[maxn]; struct edge { int to,val; }; int head[maxn],Next[maxn*maxn]; edge G[maxn*maxn]; int sz; inline void Insert(int from,edge e) { G[++sz]=e; Next[sz]=head[from]; head[from]=sz; return; } int dis[maxn]; int deg[maxn]; struct Qnode { int pos,val; }que[2002]; int n; inline void bfs() { for(int i=1;i<=n;i++) dis[i]=1; int h=0,t=0; for(int i=1;i<=n;i++) if(!deg[i]) que[t++]=(Qnode){i,1}; while( h^t ) { Qnode H=que[h++]; h%=2001; for(int i=head[H.pos];i;i=Next[i]) { edge e=G[i]; deg[e.to]--; if( !deg[e.to] ) { dis[e.to]=H.val+1; que[t++]=(Qnode){e.to,H.val+1}; t%=2001; } } } return; } inline int Read() { char c=getchar(); while( c<'0' or '9'<c ) c=getchar(); int res=0; while( '0'<=c and c<='9' ) res=(res<<3)+(res<<1)+c-'0',c=getchar(); return res; } char buf[4]; int buf_sz; inline void Write(int x) { buf_sz=0; while(x>0) buf[buf_sz++]=x%10+'0',x/=10; while( buf_sz-- ) putchar(buf[buf_sz]); return; } int main(int argc, char const *argv[]) { int m; n=Read(),m=Read(); int l,r; for(register int i=1;i<=m;i++) { if(i>1) for(;l<=r;l++) table[l]=false; int len; len=Read(); for(register int j=1;j<=len;j++) { a[j]=Read(); if(j==1) l=a[j]; else if(j==len) r=a[j]; table[a[j]]=true; } for(register int j=1;j<=len;j++) for(register int k=l+1;k<r;k++) { if( a[j]==k or table[k] or Map[a[j]][k] ) continue; Map[a[j]][k]=true; Insert( a[j],(edge){k,1} ); deg[k]++; } } bfs(); int ans=1; for(register int i=1;i<=n;i++) ans=max( ans,dis[i] ); Write(ans); return 0; } ``` 这个比之前的慢了500多ms……
by info___tion @ 2018-09-28 17:32:29


| 下一页