#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?
我有看到有人說測資很多 有用