×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
#20303: 請問這個程式該怎麼改才會ac
superuserjoy@gmail.com
(summeruserjoy)
學校 : 國立中興大學
編號 : 98294
×
傳送站內訊息
傳給:
主題:
內容:
來源 : [49.216.173.168]
最後登入時間 :
2024-06-16 08:38:00
b967.
4. 血緣關係
--
2016年3月
apcs
| From: [180.204.210.235] | 發表日期 : 2019-12-26 23:27
#include <iostream>
#include <vector>
#include <algorithm>
using
namespace
std
;
struct
node
{
int
parent
=
-
1
;
vector
<
int
>
child
;
int
height
[
2
]
;
}
;
vector
<
node
>
no
;
int
re
(
int
num
)
{
if
(
no
[
num
]
.
child
.
size
(
)
==
0
)
{
no
[
num
]
.
height
[
0
]
=
0
;
return
(
0
)
;
}
else
{
int
maxre
=
0
,temp3
=
0
;
for
(
int
i
=
0
;
i
<
no
[
num
]
.
child
.
size
(
)
;
i
++
)
{
int
hei,temp2
;
temp2
=
re
(
no
[
num
]
.
child
[
i
]
)
;
hei
=
no
[
no
[
num
]
.
child
[
i
]
]
.
height
[
0
]
1
;
if
(
hei
>
no
[
num
]
.
height
[
0
]
)
{
swap
(
no
[
num
]
.
height
[
0
]
,no
[
num
]
.
height
[
1
]
)
;
no
[
num
]
.
height
[
0
]
=
hei
;
}
else
if
(
hei
>
no
[
num
]
.
height
[
1
]
)
{
no
[
num
]
.
height
[
1
]
=
hei
;
}
if
(
temp2
>
hei
)
{
maxre
=
temp2
;
}
}
temp3
=
no
[
num
]
.
height
[
0
]
no
[
num
]
.
height
[
1
]
;
if
(
maxre
>
temp3
)
{
return
(
maxre
)
;
}
else
{
return
(
temp3
)
;
}
}
}
int
main
(
)
{
cin
.
tie
(
0
)
;
int
N
;
while
(
cin
>>
N
)
{
no.
resize
(
0
)
;
no.
resize
(
N
)
;
for
(
int
i
=
0
;
i
<
N
-
1
;
i
++
)
{
int
big,small
;
cin
>>
big
>>
small
;
no
[
big
]
.
child
.
push_back
(
small
)
;
no
[
small
]
.
parent
=
big
;
}
int
root
=
0
;
while
(
no
[
root
]
.
parent
!
=
-
1
)
{
root
=
no
[
root
]
.
parent
;
}
if
(
root
==
N
)
root
-
=
1
;
cout
<<
re
(
root
)
<<
"
\n
"
;
}
}
本來第18行沒有初始化,會跑奇怪的數字,但初始化後測資2、3都有錯
超時的部分不知道有沒有解
#20304: Re:請問這個程式該怎麼改才會ac
superuserjoy@gmail.com
(summeruserjoy)
學校 : 國立中興大學
編號 : 98294
×
傳送站內訊息
傳給:
主題:
內容:
來源 : [49.216.173.168]
最後登入時間 :
2024-06-16 08:38:00
b967.
4. 血緣關係
--
2016年3月
apcs
| From: [180.204.210.235] | 發表日期 : 2019-12-26 23:30
#include
#include
#include
using
namespace
std
;
struct
node
{
int
parent
=
-
1
;
vector
<
int
>
child
;
int
height
[
2
]
;
}
;
vector
<
node
>
no
;
int
re
(
int
num
)
{
if
(
no
[
num
]
.
child
.
size
(
)
==
0
)
{
no
[
num
]
.
height
[
0
]
=
0
;
return
(
0
)
;
}
else
{
int
maxre
=
0
,temp3
=
0
;
for
(
int
i
=
0
;
i
<
no
[
num
]
.
child
.
size
(
)
;
i
++
)
{
int
hei,temp2
;
temp2
=
re
(
no
[
num
]
.
child
[
i
]
)
;
hei
=
no
[
no
[
num
]
.
child
[
i
]
]
.
height
[
0
]
1
;
if
(
hei
>
no
[
num
]
.
height
[
0
]
)
{
swap
(
no
[
num
]
.
height
[
0
]
,no
[
num
]
.
height
[
1
]
)
;
no
[
num
]
.
height
[
0
]
=
hei
;
}
else
if
(
hei
>
no
[
num
]
.
height
[
1
]
)
{
no
[
num
]
.
height
[
1
]
=
hei
;
}
if
(
temp2
>
hei
)
{
maxre
=
temp2
;
}
}
temp3
=
no
[
num
]
.
height
[
0
]
no
[
num
]
.
height
[
1
]
;
if
(
maxre
>
temp3
)
{
return
(
maxre
)
;
}
else
{
return
(
temp3
)
;
}
}
}
int
main
(
)
{
cin
.
tie
(
0
)
;
int
N
;
while
(
cin
>>
N
)
{
no.
resize
(
0
)
;
no.
resize
(
N
)
;
for
(
int
i
=
0
;
i
<
N
-
1
;
i
++
)
{
int
big,small
;
cin
>>
big
>>
small
;
no
[
big
]
.
child
.
push_back
(
small
)
;
no
[
small
]
.
parent
=
big
;
}
int
root
=
0
;
while
(
no
[
root
]
.
parent
!
=
-
1
)
{
root
=
no
[
root
]
.
parent
;
}
if
(
root
==
N
)
root
-
=
1
;
cout
<<
re
(
root
)
<<
"
\n
"
;
}
}
本來第18行沒有初始化,會跑奇怪的數字,但初始化後測資2、3都有錯
超時的部分不知道有沒有解
附註:跑奇怪的數字之中有幾次會跑到1、2、3都過
超時是第四部分
ZeroJudge Forum