標題:
[作業繳交] 2025/03/15
[打印本頁]
作者:
方浩葦
時間:
2025-3-15 02:28
標題:
[作業繳交] 2025/03/15
1. APCS 實作題:
10503 - 4
2. APCS 觀念題:10510 - 12、13
作者:
黃暐鈞
時間:
2025-3-15 14:01
本帖最後由 黃暐鈞 於 2025-3-22 15:10 編輯
APCS 實作題 10503 - 4
#include<bits/stdc++.h>
using namespace std;
int n;//人數
int root;//根節點
int res;
int finalMaxChildDis;
struct Node
{
int parent=-1,h=0;
int maxChildDis=0,max=-1,sec=-1;
vector<int> child;
};
int main()
{
cin>>n;
int finalMaxChildDis=-1;
Node node[n];//node資料庫_共n人
for(int i=0;i<n-1;i++)//n個人有n-1個連結
{
int p;//父節點
int c;//子節點
cin>>p>>c;
node[c].parent=p;//c屬於b->p屬於node[c].parent
node[p].child.push_back(c);//一個父節點可以同時有很多子節點->用vector存
}//建立關係
for(int i=0;i<n;i++)//n次
{
if(node[i].parent==-1)//該節點沒有設定父節點->最高->根節點
{
root=i;
}
if(node[i].child.size()==0)//確認該節點的子節點數量:為0->最底部
{
int h=0;
int parent=node[i].parent;//額外定義 不影響node資料
while(parent!=-1)//有父節點
{
h++;
if(h>node[parent].h)
{
node[parent].h=h;//找最深
}
else
{
break;
}
parent=node[parent].parent;//繼續往上找
}
}
}
for(int i=0;i<n;i++)//n次
{
if(node[i].child.size()>=2)//子節點數量>=2
{
for(int j=0;j<node[i].child.size();j++)//重複'子節點數量'次
{
int childH=node[node[i].child[j]].h;//取出子節點的深度
if(childH>node[i].max)//找最深
{
node[i].sec=node[i].max;//找第二深(可能介於兩個最大之間)
node[i].max=childH;
}
else if(childH>node[i].sec)//介於兩個最大之間->更新第二大
{
node[i].sec=childH;
}
}
node[i].maxChildDis=node[i].max+node[i].sec+2;//計算總距離
if(node[i].maxChildDis>finalMaxChildDis)//比較並更新
{
finalMaxChildDis=node[i].maxChildDis;
}
}
}
if(node[root].h>finalMaxChildDis)//根節點距離最遠 不用找另外的子節點距離and+2
{
res=node[root].h;
}
else
{
res=finalMaxChildDis;
}
cout<<res;
}
/*
8
0 1
0 2
0 3
7 0
1 4
1 5
3 6
*/
/*
4
0 1
0 2
2 3
*/
複製代碼
APCS 觀念題:10510 - 12、13
12.(A)
13.(C)
作者:
郭博鈞
時間:
2025-3-15 15:31
本帖最後由 郭博鈞 於 2025-3-18 20:46 編輯
1. APCS 實作題:
#include<bits/stdc++.h>
using namespace std;
int root;
int finalmaxchilddis,res;
struct Node
{
int parent=-1,h=0;
int maxchilddis=-1,max=-1,sec=-1;
vector<int> child;
};
int main()
{
int n;
while(cin>>n)
{
Node node[n];
finalmaxchilddis=-1;
for(int i=0;i<n-1;i++)
{
int p,c;
cin>>p>>c;
node[c].parent=p;
node[p].child.push_back(c);
}
for(int i=0;i<n;i++)
{
if(node[i].parent==-1)
{
root=i;
}
if(node[i].child.size()==0)
{
int h=0;
int parent=node[i].parent;
while(parent!=-1)
{
h++;
if(h>node[parent].h)
node[parent].h=h;
else
break;
parent=node[parent].parent;
}
}
}
for(int i=0;i<n;i++)
{
if(node[i].child.size()>=2)
{
for(int j=0;j<node[i].child.size();j++)
{
int childh=node[node[i].child[j]].h;
if(childh>node[i].max)
{
node[i].sec=node[i].max;
node[i].max=childh;
}
else if(childh>node[i].sec)
node[i].sec=childh;
}
node[i].maxchilddis=node[i].max+node[i].sec+2;
if(node[i].maxchilddis>finalmaxchilddis)
{
finalmaxchilddis=node[i].maxchilddis;
}
}
}
if(node[root].h>finalmaxchilddis)
res=node[root].h;
else
res=finalmaxchilddis;
cout<<res<<endl;
}
return 0;
}
複製代碼
2. APCS 觀念題:10510 - 12、13
B
A
作者:
許浩浩
時間:
2025-3-21 20:42
本帖最後由 許浩浩 於 2025-3-22 07:16 編輯
1. APCS 實作題:
10503 - 4
#include<bits/stdc++.h>
using namespace std;
int n,root;
int res,finalMaxChildDis;
struct Node
{
int parent=-1,h=0;
int maxChildDis=-1,max=-1,sec=-1;
vector<int> child;
};
int main()
{
cin.tie(0);
cin.sync_with_stdio(0);
while(cin>>n)
{
finalMaxChildDis=-1;
Node node[n];
for(int i=0;i<n-1;i++)
{
int p,c;
cin>>p>>c;
node[c].parent=p;
node[p].child.push_back(c);
}
for(int i=0;i<n;i++)
{
if(node[i].parent==1)
root=i;
if(node[i].child.size()==0)
{
int h=0;
int parent=node[i].parent;
while(parent!=-1)
{
h++;
if(h>node[parent].h)
node[parent].h=h;
else
break;
parent=node[parent].parent;
}
}
}
for(int i=0;i<n;i++)
{
if(node[i].child.size()>=2)
{
for(int j=0;j<node[i].child.size();j++)
{
int childH=node[node[i].child[j]].h;
if(childH>node[i].max)
{
node[i].sec=node[i].max;
node[i].max=childH;
}
else if(childH>node[i].sec)
node[i].sec=childH;
}
node[i].maxChildDis=node[i].max+node[i].sec+2;
if(node[i].maxChildDis>finalMaxChildDis)
finalMaxChildDis=node[i].maxChildDis;
}
}
if(node[root].h>finalMaxChildDis)
res=node[root].h;
else
res=finalMaxChildDis;
cout<<res<<endl;
}
return 0;
}
複製代碼
2. APCS 觀念題:10510 - 12、13
(B) (B)
複製代碼
作者:
江家同
時間:
2025-3-21 23:21
1. APCS 實作題:
#include<bits/stdc++.h>
using namespace std;
int n,root;
int res,finalMaxChildDis;
struct Node
{
int parent=-1,h=0;
int maxChildDis=-1,max=-1,sec=-1;
vector<int>child;
};
int main()
{
cin.tie(0);
cin.sync_with_stdio(0);
while(cin>>n)
{
finalMaxChildDis=-1;
Node node[n];
for(int i=0;i<n-1;i++)
{
int p,c;
cin>>p>>c;
node[c].parent=p;
node[p].child.push_back(c);
}
for(int i=0;i<n;i++)
{
if(node[i].parent==-1)
root=i;
if(node[i].child.size()==0)
{
int h=0;
int parent=node[i].parent;
while(parent!=-1)
{
h++;
if(h>node[parent].h)
node[parent].h=h;
else
break;
parent=node[parent].parent;
}
}
}
for(int i=0;i<n;i++)
{
if(node[i].child.size()>=2)
{
for(int j=0;j<node[i].child.size();j++)
{
int childH=node[node[i].child[j]].h;
if(childH>node[i].max)
{
node[i].sec=node[i].max;
node[i].max=childH;
}
else if(childH>node[i].sec)
node[i].sec=childH;
}
node[i].maxChildDis=node[i].max+node[i].sec+2;
if(node[i].maxChildDis>finalMaxChildDis)
finalMaxChildDis=node[i].maxChildDis;
}
}
if(node[root].h>finalMaxChildDis)
res=node[root].h;
else
res=finalMaxChildDis;
cout<<res<<endl;
}
return 0;
}
複製代碼
2. APCS 觀念題:
10510 - 12
(B)
10510 - 13
(B)
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/)
Powered by Discuz! 7.2