Submission details
Task:Counting Canals
Sender:ollpu_kilo
Submission time:2018-09-13 18:34:55 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.03 sdetails
#2ACCEPTED0.03 sdetails
#3ACCEPTED0.02 sdetails
#40.02 sdetails
#5ACCEPTED0.03 sdetails
#60.03 sdetails
#70.02 sdetails
#8ACCEPTED0.03 sdetails
#90.03 sdetails
#100.04 sdetails
#110.16 sdetails
#120.14 sdetails
#130.15 sdetails
#140.15 sdetails
#150.16 sdetails
#16ACCEPTED0.09 sdetails
#17ACCEPTED0.10 sdetails
#180.15 sdetails
#190.16 sdetails
#200.16 sdetails
#210.18 sdetails
#220.15 sdetails
#230.19 sdetails
#240.17 sdetails
#250.16 sdetails
#26ACCEPTED0.18 sdetails
#27ACCEPTED0.17 sdetails
#280.15 sdetails
#290.14 sdetails
#300.15 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
vector<int> v[101010];
set<int> aob[2][101010];
long res = 0;
void h(int i, int p=-1) {
  aob[0][i].insert(i);
  aob[1][i].insert(i);
  for (int j : v[i]) {
    if (j == p) continue;
    h(j, i);
    int x = j > i;
    if (aob[x][j].size() > aob[x][i].size()) swap(aob[x][j], aob[x][i]);
    for (int e : aob[x][j]) aob[x][i].insert(e);
  }
  while (*aob[0][i].rbegin() > i) aob[0][i].erase(--aob[0][i].end());
  while (*aob[1][i].begin() < i) aob[1][i].erase(aob[1][i].begin());
  res += (long)aob[0][i].size()*aob[1][i].size();
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < n-1; ++i) {
    int a, b;
    cin >> a >> b;
    a--; b--;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  h(0);
  cout << res << endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
5
1 2
2 3
3 4
4 5

correct output
15

user output
15

Test 2

Verdict: ACCEPTED

input
4
3 2
2 1
4 2

correct output
9

user output
9

Test 3

Verdict: ACCEPTED

input
1

correct output
1

user output
1

Test 4

Verdict:

input
6
1 3
3 5
3 4
4 6
...

correct output
17

user output
16

Test 5

Verdict: ACCEPTED

input
10
10 1
1 9
9 2
2 8
...

correct output
19

user output
19

Test 6

Verdict:

input
10
10 6
2 4
1 2
5 10
...

correct output
25

user output
23

Test 7

Verdict:

input
10
9 1
8 1
8 5
10 2
...

correct output
20

user output
19

Test 8

Verdict: ACCEPTED

input
10
9 5
1 6
8 5
10 6
...

correct output
24

user output
24

Test 9

Verdict:

input
10
10 3
1 6
6 3
10 8
...

correct output
26

user output
24

Test 10

Verdict:

input
10
1 10
9 3
5 10
6 8
...

correct output
22

user output
21

Test 11

Verdict:

input
100000
61825 85829
24480 90462
1014 5496
81225 44931
...

correct output
3130799

user output
272952

Test 12

Verdict:

input
100000
12328 59847
68010 51200
20911 42026
5769 15416
...

correct output
13958274

user output
279526

Test 13

Verdict:

input
100000
20362 12728
7958 63236
52010 30403
43065 57339
...

correct output
15065805

user output
310669

Test 14

Verdict:

input
100000
8572 72714
94149 74894
64167 42479
28114 53008
...

correct output
365273

user output
261447

Test 15

Verdict:

input
100000
1978 36216
32844 35606
89082 19460
32960 67705
...

correct output
299957

user output
243691

Test 16

Verdict: ACCEPTED

input
100000
1 100000
2 100000
2 99999
3 99999
...

correct output
199999

user output
199999

Test 17

Verdict: ACCEPTED

input
100000
1 2
2 3
3 4
4 5
...

correct output
5000050000

user output
5000050000

Test 18

Verdict:

input
100000
26026 17578
2063 27495
18825 88516
73417 44243
...

correct output
300106

user output
243697

Test 19

Verdict:

input
100000
62594 92916
39396 77445
39736 18145
51960 63921
...

correct output
305292

user output
243354

Test 20

Verdict:

input
100000
35361 29834
80103 20628
56121 98538
96141 60130
...

correct output
299953

user output
243849

Test 21

Verdict:

input
100000
83387 6566
1464 36071
83940 1947
30207 81630
...

correct output
18170796

user output
2699898

Test 22

Verdict:

input
100000
57048 59591
13592 7630
96625 65606
39702 62144
...

correct output
122357921

user output
11184554

Test 23

Verdict:

input
100000
665 16956
97424 82744
19070 82235
29207 21317
...

correct output
255370837

user output
49190542

Test 24

Verdict:

input
100000
73391 7794
48957 7794
10376 7794
68812 7794
...

correct output
661409588

user output
634750016

Test 25

Verdict:

input
100000
25428 93716
47665 20024
43005 47665
47665 4035
...

correct output
775090231

user output
348779947

Test 26

Verdict: ACCEPTED

input
100000
88514 75301
20924 75301
8871 75301
26360 75301
...

correct output
1860034699

user output
1860034699

Test 27

Verdict: ACCEPTED

input
100000
31831 1
46505 1
76032 1
41560 1
...

correct output
199999

user output
199999

Test 28

Verdict:

input
100000
38156 15310
92580 66280
10847 49530
8672 38794
...

correct output
27926764

user output
321426

Test 29

Verdict:

input
100000
60300 13490
372 28166
4123 3653
97935 79942
...

correct output
27607584

user output
306704

Test 30

Verdict:

input
100000
93798 40604
95227 14928
80126 98198
54474 67913
...

correct output
22603373

user output
294209