#33455: C++求救 最後一筆測資TLE


ironman30832@gmail.com (Wang YuChun)

學校 : 國立臺北科技大學
編號 : 105311
來源 : [61.220.20.52]
最後登入時間 :
2023-10-24 09:33:02
b967. 4. 血緣關係 -- 2016年3月apcs | From: [124.218.32.68] | 發表日期 : 2023-01-07 06:20

#include<iostream>
using namespace std;
#define MAX 100001
int list[MAX][2],childnum[MAX];
int big=0;

int tmp=0;
int single=0;
int dfs(int pa,int depth,int n){
    if(childnum[pa]==0){
        if(depth>big){
            big=depth;
        }
        return depth;
    }
    if(childnum[pa]>0){
        int max1=0,max2=0;
        for(int i =0;i<n-1;i++){
            if(list[i][0]==pa){
                
                tmp=dfs(list[i][1],depth+1,n);
                if(tmp>=max2)max2=tmp;
                if(max2>max1)swap(max1,max2);
            }
        }
        if(childnum[pa]==1)single=1;
        else single=2;
        
        if((max1+max2)-depth*single>big)big=max1+max2-depth*single;
        //cout<<pa<<"!"<<depth<<"!"<<max1<<"!"<<max2<<"!"<<(max1+max2)-depth*single<<endl;
        return max1;
    }
}

int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    int n,origin_pa,ans;
    int ischild[MAX]={0};
    
    while(cin>>n){
        big=0;
        for(int i = 0;i<n;i++){
            list[i][0]=0;
            list[i][1]=0;    
            childnum[i]=0;
            ischild[i]=0;    
        }
        for(int i = 0;i<n-1;i++){
            
            cin>>list[i][0]>>list[i][1];
            childnum[list[i][0]]++;
            ischild[list[i][1]]=1;
        }
        for(int i =0;i<n;i++){    //找出元祖 
            if(ischild[i]==0)origin_pa=i;
        }
        dfs(origin_pa,0,n);
        cout <<big<<endl;
    }
    
return 0;
}

 

 

這是我的程式碼 請問是甚麼問題造成最後一筆測資TLE?

我有看到有人說測資很多 有用

  1. std::ios::sync_with_stdio(false);
  2.     std::cin.tie(0);
    但好像還是沒用?
 
ZeroJudge Forum