/*************************************************************************
* *
* XX Olimpiada Informatyczna *
* *
* Zadanie: Luk triumfalny *
* Autor: Wiktor Kuropatwa *
* Zlozonosc czasowa: O(n log n) *
* Zlozonosc pamieciowa: O(n) *
* Opis: Rozwiazanie wzorcowe *
* *
*************************************************************************/
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> D[300005];
int add[300005];
int n,ignore;
void read()
{
ignore = scanf("%d", &n);
for(int i = 1; i<n; i++)
{
int a,b;
ignore = scanf("%d%d", &a, &b);
D[a].push_back(b);
D[b].push_back(a);
}
}
void root(int u, int p)
{
for(int i = 0; i<(int)D[u].size(); i++)
{
if(D[u][i] != p)
root(D[u][i],u);
else
{
swap(D[u][i], D[u].back());
D[u].pop_back();
i--;
}
}
}
void dfs(int u, int s)
{
if(D[u].size() == 0)
{
add[u] = 0;
return;
}
for(int i = 0; i<(int)D[u].size(); i++)
dfs(D[u][i],s);
add[u] = 0;
for(int i = 0; i<(int)D[u].size(); i++)
add[u] += add[D[u][i]] + 1;
add[u] -= s;
add[u] = max(add[u],0);
}
bool check(int s)
{
dfs(1,s);
return !add[1];
}
int binSearch()
{
int p = 0, q = n;
while(q-p>1)
{
int s = (p+q)/2;
if(check(s))
q = s;
else
p = s;
}
if(check(p))
return p;
return q;
}
int main()
{
read();
root(1,1);
printf("%d\n", binSearch());
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
9376 KB |
Output is correct |
2 |
Correct |
0 ms |
9376 KB |
Output is correct |
3 |
Correct |
0 ms |
9376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
9376 KB |
Output is correct |
2 |
Correct |
3 ms |
9376 KB |
Output is correct |
3 |
Correct |
0 ms |
9376 KB |
Output is correct |
4 |
Correct |
0 ms |
9376 KB |
Output is correct |
5 |
Correct |
0 ms |
9376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
9376 KB |
Output is correct |
2 |
Correct |
3 ms |
9376 KB |
Output is correct |
3 |
Correct |
0 ms |
9376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
9376 KB |
Output is correct |
2 |
Correct |
6 ms |
9376 KB |
Output is correct |
3 |
Correct |
3 ms |
9376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
9772 KB |
Output is correct |
2 |
Correct |
13 ms |
9928 KB |
Output is correct |
3 |
Correct |
6 ms |
9772 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
39 ms |
10432 KB |
Output is correct |
2 |
Correct |
49 ms |
11332 KB |
Output is correct |
3 |
Correct |
26 ms |
10564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
256 ms |
12676 KB |
Output is correct |
2 |
Correct |
333 ms |
14912 KB |
Output is correct |
3 |
Correct |
96 ms |
13076 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
413 ms |
15976 KB |
Output is correct |
2 |
Correct |
889 ms |
21652 KB |
Output is correct |
3 |
Correct |
239 ms |
16784 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
829 ms |
19276 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1223 ms |
19276 KB |
Output is correct |
2 |
Correct |
1543 ms |
25744 KB |
Output is correct |
3 |
Correct |
379 ms |
20312 KB |
Output is correct |