求助QAQ 为啥会TLE

UVA548 Tree

我也TLE了 ```cpp #include<iostream> #include<cstring> #define MAXN 1000001 #define INF 252645135 using namespace std; struct side{int l,r;}t[MAXN]; int n,a[MAXN],b[MAXN],ans=INF,idx=INF; int read(int*a) { int tot=0; string buf; getline(cin,buf); for(unsigned i=0;i<buf.size();i++) { int data=0; if(isdigit(buf[i])) { while(isdigit(buf[i]))data=data*10+buf[i]-'0',i++; a[++tot]=data; } } return tot; } int dfs(int l1,int r1,int l2,int r2) //递归建树 { int root=b[r2],k,len; if(l1<r1&&l2<r2) { for(int i=l1;i<=r1;i++) if(a[i]==root){k=i;break;} len=k-l1+1; t[root].l=dfs(l1,l1+len-2,l2,l2+len-2); t[root].r=dfs(l1+len,r1,l2+len-1,r2-1); } return root; } void find(int now,int sum) //递归找答案 { if(t[now].l==0&&t[now].r==0) //找到叶子节点 if(sum+now<ans||(sum+now==ans&&now<idx)) ans=sum+now,idx=now; if(t[now].l)find(t[now].l,sum+now); if(t[now].r)find(t[now].r,sum+now); } int main() { while(n=read(a),read(b)) { ans=idx=INF; int root=dfs(1,n,1,n); find(root,0); cout<<idx<<endl; } } ```
by NewSjf @ 2019-11-26 19:27:06


|