Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
BFS无限跪,改成DFS就1A了,这是什么原理……跪掉的BFS: #include<cstdio> #include<cstring> #include<algorithm> struct NODE{ int fa,sons,cnts; int pp; int peak[256]; }node[256]; NODE q[256]; bool cmp(int a,int b) { return a>b; } int main(){ int ans=0; int m,n,qh,qe; for(scanf("%d",&m);m;m--){ scanf("%d",&n); qh=qe=0; ans=0; memset(node,0,sizeof(node)); memset(q,0,sizeof(q)); for(int i=0;i<n;i++) { int p,r,son; scanf("%d %d",&p,&r); node[p].sons=r; if(!r){node[p].pp=1;q[qe]=node[p];qe++;} for(int j=0;j<r;j++){ scanf("%d",&son); node[son].fa=p; } } while(qh<qe){ for(int i=0;i<q[qh].cnts;i++) q[qh].pp=q[qh].pp>(q[qh].peak[i]+i)?q[qh].pp:(q[qh].peak[i]+i); if(q[qh].pp>ans)ans=q[qh].pp; node[q[qh].fa].peak[node[q[qh].fa].cnts]=q[qh].pp; node[q[qh].fa].cnts++; if(node[q[qh].fa].cnts==node[q[qh].fa].sons){ std::sort(node[q[qh].fa].peak,node[q[qh].fa].peak+node[q[qh].fa].sons,cmp); q[qe]=node[q[qh].fa]; qe++; } qh++; } printf("%d\n",ans); } return 0; } 起来的DFS: #include<cstdio> #include<cstring> #include<algorithm> struct NODE{ int fa,cnt; int pp; int sons[1024]; }node[1024]; NODE q[1024]; bool cmp(int a,int b) { return a>b; } int dfs(int a){ if(node[a].cnt==0) return 1; int peak[1024]; int ret=0; for(int j=0;j<node[a].cnt;j++) peak[j]=dfs(node[a].sons[j]); std::sort(peak,peak+node[a].cnt,cmp); for(int j=0;j<node[a].cnt;j++) if(ret<peak[j]+j)ret=peak[j]+j; return ret; } int main(){ int ans=0; int m,n,qh,qe; for(scanf("%d",&m);m;m--){ scanf("%d",&n); qh=qe=0; ans=0; memset(node,0,sizeof(node)); memset(q,0,sizeof(q)); for(int i=0;i<n;i++) { int p,r,son; scanf("%d%d",&p,&r); node[p].cnt=r; for(int j=0;j<r;j++){ scanf("%d",&node[p].sons[j]); } } printf("%d\n",dfs(1)); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator