#13293:


vincent97198 (好想變強喔)

學校 : 國立嘉義高級中學
編號 : 50683
來源 : [104.28.120.128]
最後登入時間 :
2023-07-08 19:46:42
c463. apcs 樹狀圖分析 (Tree Analyses) -- apcs | From: [114.33.208.245] | 發表日期 : 2018-01-26 19:49

從第3測資點到第18測資點都RE,請各位大大給點建議,謝謝

#include <iostream>
#include <math.h>
#include <vector>

using namespace std;

long long int n,ans;

long long int dfs(int now,vector<int> list[])
{
if(list[now].empty())
return 1;
else if(list[now].size()==1)
{
long long int a=dfs(list[now][0],list);

ans+=a;

return a+1;
}
else
{
long long int max0=-1;

for(long long int i=0;i<n;i++)
{
long long int a;

a=dfs(list[now][i],list);

if(a>max0)
max0=a;
}

ans+=max0;

return max0+1;
}
}

int main()
{
while(cin >> n)
{
ans=0;
vector<int> list[n+1]; //save son points
bool test[n+1];

for(long long int i=1;i<=n;i++)
{
list[i].clear();
test[i]=true;
}

for(long long int i=1;i<=n;i++)
{
int a;

cin >> a;

if(a==0)
continue;

for(long long int j=0;j<a;j++)
{
int b;

cin >> b;
list[i].push_back(b);
test[b]=false;
}
}

int oldest;

for(long long int i=1;i<=n;i++)
{
if(test[i])
{
cout << i << endl;
oldest=i;
}
}

dfs(oldest,list);

cout << ans << endl;

}

return 0;
}

 
#13294: Re:RE


vincent97198 (好想變強喔)

學校 : 國立嘉義高級中學
編號 : 50683
來源 : [104.28.120.128]
最後登入時間 :
2023-07-08 19:46:42
c463. apcs 樹狀圖分析 (Tree Analyses) -- apcs | From: [114.33.208.245] | 發表日期 : 2018-01-26 19:54

#include <iostream>

#include <math.h>

#include <vector>

 

using namespace std;

 

long long int n,ans;

 

long long int dfs(int now,vector<int> list[])

{

  if(list[now].empty())

     return 1;

  else if(list[now].size()==1)

  {

    long long int a=dfs(list[now][0],list);

    

    ans+=a;

    

    return a+1;

  }

  else

  {

    long long int max0=-1;

    

    for(long long int i=0;i<n;i++)

    {

      long long int a;

      

      a=dfs(list[now][i],list);

      

      if(a>max0)

         max0=a;

    }

    

    ans+=max0;

    

    return max0+1;

  }

}

 

int main()

{

  while(cin >> n)

  {

    ans=0;

    vector<int> list[n+1];     //save son points

    bool test[n+1];

    

    for(long long int i=1;i<=n;i++)

    {

      list[i].clear();

      test[i]=true;

    }

    

    for(long long int i=1;i<=n;i++)

    {

      int a;

      

      cin >> a;

      

      if(a==0)

         continue;

         

      for(long long int j=0;j<a;j++)

      {

        int b;

        

        cin >> b;

        list[i].push_back(b);

        test[b]=false;

      }

    }

    

    int oldest;

    

    for(long long int i=1;i<=n;i++)

    {

      if(test[i])

      {

        cout << i << endl;

        oldest=i;

      }

    }

    

    dfs(oldest,list);

    

    cout << ans << endl;

    

  }

  

  return 0;

}

 

上面那個不知為何沒有縮排

 
 
ZeroJudge Forum