#include <stdio.h>
#include <vector>
std::vector<int> AdjList[1000005];
int PhaseII[1000005];
int m, t, T;
int MT[1000005];
int between;
void findMT(int u, int pa)
{
if (u == t)
{
MT[u] = t;
return;
}
int i, v, s = AdjList[u].size();
for (i = 0; i < s; i++)
{
v = AdjList[u][i];
if (v != pa)
{
findMT(v, u);
if (MT[v])
MT[u] = v;
}
}
}
void calcPhaseII(int u, int pa)
{
int i, v, s = AdjList[u].size();
int S = s;
for (i = 0; i < s; i++)
{
v = AdjList[u][i];
if (v != pa && MT[v])
S--;
}
if (S == 1 || S == 2)
PhaseII[u] = 1 - (pa == T);
else if (pa == T)
PhaseII[u] = S - 3;
else
PhaseII[u] = S - 2;
PhaseII[u] += PhaseII[pa];
// printf("u%d PhaseII%d\n", u, PhaseII[u]);
for (i = 0; i < s; i++)
{
v = AdjList[u][i];
if (v != pa && !MT[v])
calcPhaseII(v, u);
}
}
int PhaseI[1000005];
int min(int a, int b)
{
return (a < b)?a:b;
}
void calcPhaseI(int u, int pa)
{
int i, v, s = AdjList[u].size();
int S = s;
for (i = 0; i < s; i++)
{
v = AdjList[u][i];
if (v != pa && MT[v])
S--;
}
int p = PhaseII[u], q = PhaseII[u];
for (i = 0; i < s; i++)
{
v = AdjList[u][i];
if (v != pa && !MT[v])
{
calcPhaseI(v, u);
if (PhaseI[v] >= p)
{
q = p;
p = PhaseI[v];
}
else if (PhaseI[v] >= q)
q = PhaseI[v];
}
}
if (S == 1)
PhaseI[u] = q;
else
PhaseI[u] = 1 + q;
// printf("u%d PhaseI%d\n", u, PhaseI[u]);
}
int main()
{
int n;
scanf("%d %d %d", &n, &t, &m);
int i, u, v;
for (i = 0; i < n - 1; i++)
{
scanf("%d %d", &u, &v);
AdjList[u].push_back(v);
AdjList[v].push_back(u);
}
findMT(m, 0);
for (i = 1; i <= n; i++)
{
// printf("MT %d\n", MT[i]);
if (MT[i] && i != m && i != t)
between += AdjList[i].size() - 2;
}
int ans = 0;
u = m;
while (u != t)
{
T = MT[u];
calcPhaseII(u, T);
calcPhaseI(u, T);
ans += PhaseI[u];
u = MT[u];
break;
// printf("ans %d\n", ans);
}
// printf("ans %d between %d\n", ans, between);
ans += between;
printf("%d", ans);
}
Compilation message
mousetrap.cpp: In function 'int main()':
mousetrap.cpp:92:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &n, &t, &m);
^
mousetrap.cpp:96:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &u, &v);
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
23800 KB |
Output is correct |
2 |
Correct |
22 ms |
24032 KB |
Output is correct |
3 |
Correct |
22 ms |
24032 KB |
Output is correct |
4 |
Correct |
23 ms |
24120 KB |
Output is correct |
5 |
Correct |
27 ms |
24120 KB |
Output is correct |
6 |
Correct |
22 ms |
24120 KB |
Output is correct |
7 |
Correct |
22 ms |
24120 KB |
Output is correct |
8 |
Correct |
22 ms |
24288 KB |
Output is correct |
9 |
Correct |
22 ms |
24292 KB |
Output is correct |
10 |
Correct |
22 ms |
24292 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
523 ms |
63552 KB |
Output is correct |
2 |
Correct |
449 ms |
63552 KB |
Output is correct |
3 |
Correct |
1475 ms |
64624 KB |
Output is correct |
4 |
Correct |
692 ms |
64624 KB |
Output is correct |
5 |
Correct |
1471 ms |
64692 KB |
Output is correct |
6 |
Correct |
1490 ms |
64692 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
23800 KB |
Output is correct |
2 |
Correct |
22 ms |
24032 KB |
Output is correct |
3 |
Correct |
22 ms |
24032 KB |
Output is correct |
4 |
Correct |
23 ms |
24120 KB |
Output is correct |
5 |
Correct |
27 ms |
24120 KB |
Output is correct |
6 |
Correct |
22 ms |
24120 KB |
Output is correct |
7 |
Correct |
22 ms |
24120 KB |
Output is correct |
8 |
Correct |
22 ms |
24288 KB |
Output is correct |
9 |
Correct |
22 ms |
24292 KB |
Output is correct |
10 |
Correct |
22 ms |
24292 KB |
Output is correct |
11 |
Incorrect |
21 ms |
64692 KB |
Output isn't correct |
12 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
22 ms |
23800 KB |
Output is correct |
2 |
Correct |
22 ms |
24032 KB |
Output is correct |
3 |
Correct |
22 ms |
24032 KB |
Output is correct |
4 |
Correct |
23 ms |
24120 KB |
Output is correct |
5 |
Correct |
27 ms |
24120 KB |
Output is correct |
6 |
Correct |
22 ms |
24120 KB |
Output is correct |
7 |
Correct |
22 ms |
24120 KB |
Output is correct |
8 |
Correct |
22 ms |
24288 KB |
Output is correct |
9 |
Correct |
22 ms |
24292 KB |
Output is correct |
10 |
Correct |
22 ms |
24292 KB |
Output is correct |
11 |
Correct |
523 ms |
63552 KB |
Output is correct |
12 |
Correct |
449 ms |
63552 KB |
Output is correct |
13 |
Correct |
1475 ms |
64624 KB |
Output is correct |
14 |
Correct |
692 ms |
64624 KB |
Output is correct |
15 |
Correct |
1471 ms |
64692 KB |
Output is correct |
16 |
Correct |
1490 ms |
64692 KB |
Output is correct |
17 |
Incorrect |
21 ms |
64692 KB |
Output isn't correct |
18 |
Halted |
0 ms |
0 KB |
- |