CSES - Siperia opettaa 3.0 - Results
Submission details
Task:Toll Roads
Sender:eXeP
Submission time:2016-07-29 17:42:37 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.07 sdetails
#3ACCEPTED0.06 sdetails
#40.06 sdetails
#50.05 sdetails
#60.06 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.05 sdetails
#9ACCEPTED0.06 sdetails
#100.05 sdetails
#110.05 sdetails
#120.05 sdetails
#130.05 sdetails
#140.06 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.06 sdetails
#170.06 sdetails
#18ACCEPTED0.05 sdetails
#190.06 sdetails
#20ACCEPTED0.05 sdetails
#210.06 sdetails
#220.06 sdetails
#230.05 sdetails
#240.06 sdetails
#250.05 sdetails
#260.04 sdetails
#27ACCEPTED0.06 sdetails
#280.05 sdetails
#290.06 sdetails
#301.33 sdetails
#310.06 sdetails
#320.07 sdetails
#330.17 sdetails
#341.44 sdetails
#35--details
#36--details
#37--details
#38--details
#39--details
#40--details
#410.06 sdetails
#420.06 sdetails
#430.18 sdetails
#440.05 sdetails
#450.06 sdetails
#460.11 sdetails
#470.20 sdetails
#481.14 sdetails
#49--details
#50--details
#51--details
#52--details
#53--details
#540.06 sdetails
#550.06 sdetails
#563.02 sdetails
#570.06 sdetails
#580.10 sdetails
#590.87 sdetails
#60--details
#61--details
#62--details
#63--details
#64--details
#65--details
#66--details
#67--details
#68ACCEPTED9.29 sdetails
#690.06 sdetails
#70ACCEPTED3.40 sdetails
#710.06 sdetails
#720.05 sdetails

Code

#include <bits/stdc++.h>

#define i64 long long
#define u64 unsigned long long
#define i32 int
#define u32 unsigned int

#define pii pair<int, int>
#define pll pair<long long, long long>

#define ld long double
#define defmod 1000000007

#define mati64(a,b) vector<vector<i64>>(a, vector<i64>(b, 0));
using namespace std;

int n, k;
vector<int> v[5050];
int pa[5050];
vector<pair<int, int>> al[5050];
int de[5050];

void hae1(int cur){
  for(auto f: v[cur]){
    if(f == pa[cur])
      continue;
    pa[f] = cur;
    hae1(f);
    al[cur].push_back({de[f]+1, f});
    de[cur] = max(de[f]+1, de[cur]);
  }
}
vector<bool> d1;
multiset<int> cc;
int gp(int cur, int last){
  if(al[cur][0].second == last){
    if(al[cur].size() == 1)
      return -1;
    return al[cur][1].first;
  }
  return al[cur][0].first;
}
pair<int, int> gp2(int cur, int last, int last2){
  if(al[cur][0].second == last || al[cur][0].second == last2){
    if(al[cur].size() == 1)
      return {0, -1};
    if(al[cur][1].second == last || al[cur][1].second == last2){
      if(al[cur].size() == 2)
	return {0, -1};
      return al[cur][2];
    }
    return al[cur][1];
  }
  return al[cur][0];
}
pair<int, int> gp3(int cur, int last, int last2, int last3){
  if(al[cur][0].second == last || al[cur][0].second == last2 || al[cur][0].second == last3){
    if(al[cur].size() == 1)
      return {0, -1};
    if(al[cur][1].second == last || al[cur][1].second == last2|| al[cur][0].second == last3){
      if(al[cur].size() == 2)
	return {0, -1};
      if(al[cur][2].second == last || al[cur][2].second == last2|| al[cur][2].second == last3){
          if(al[cur].size() == 3)
	    return {0, -1};
	  return al[cur][3];
      }
      return al[cur][2];
    }
    return al[cur][1];
  }
  return al[cur][0];
}
void adpis(int cur){
  for(auto f: v[cur]){
    if(f == pa[cur])
      continue;
    al[f].push_back({gp(cur, f)+1, cur});
    sort(al[f].begin(), al[f].end(), greater<pair<int, int>>());
    adpis(f);
  }
}
int ans = 10000, at = 10000, aa, ab;
int alk = 0;
void hae2(int cur, int last, int d){
  //cout << "cur " << cur << " last " << last << " d " << d << endl;
  if(d > k)
    return;
  if(d != 0){
    pii fak = gp2(cur, last, -1);
    cc.insert(fak.first);
    pii fakw = gp2(cur, last, fak.second);
    cc.insert(fakw.first);
    int be = 10000;
    if(cc.size() == 1){
      //cout << "be " << *cc.rbegin() << endl;
      be = *cc.rbegin();
    }
    else{
      be = *cc.rbegin();
      cc.erase(cc.find(be));
      int vv = *cc.rbegin();
      cc.insert(be);
      be+=vv;;
    }
    if(be < ans){
      
      ans = be;
      at = d;
      aa = alk;
      ab = cur;
      //cout << "taalla1 " << aa << " " << ab << " " << d<< endl;
    }
    else if(be == ans && d < at){
      ans = be;
      at = d;
      aa = alk;
      ab = cur;
      //cout << "taalla " << aa << " " << ab << " " << d<< endl;
    }
    //cout << alk << "->"<< cur << " mukana " << endl;
    //for(auto f: cc)
    //  cout << f << " ";
    //cout << endl << endl;
    cc.erase(cc.find(fak.first));
    cc.erase(cc.find(fakw.first));
  }
  
  for(auto f: v[cur]){
    if(f == last)
      continue;
    pair<int, int> lis = gp2(cur, last, f);
    cc.insert(lis.first);
    pair<int, int> lis2 = gp3(cur, last, f, lis.second);
    cc.insert(lis2.first);
    hae2(f, cur, d+1);
    cc.erase(cc.find(lis.first));
    cc.erase(cc.find(lis2.first));
  }
  
}
int main(){
  cin.sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  for(int i = 0; i < n-1; ++i){
    int a, b; cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  hae1(0);
  for(int i = 0; i < n; ++i){
    sort(al[i].begin(), al[i].end(), greater<pair<int, int>>());
  }
  adpis(0);

  for(int i = 0; i < n; ++i){
    cc.clear();
    
    int be = 0;
    //cout << i << ": ";
    //for(auto f: al[i])
    //  cout << f.first << "," << f.second << " ";
    //cout << endl;
    if(al[i].size() == 1)
      be = al[i][0].first;
    else if(al[i].size() > 1)
      be = al[i][0].first+al[i][1].first;
    if(be < ans){
      ans = be;
      at = 0;
      aa = i;
      ab = i;
    }
    alk = i;
    hae2(i, -1, 0);
  }
  if(at == 0)
    cout << ans << endl << at << endl;
  else
    cout << ans << endl << at << endl << aa << " " << ab << endl;
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
8 3
0 2
0 5
2 3
5 1
...

correct output
2
3
2 6

user output
2
3
2 6

Test 2

Verdict: ACCEPTED

input
5 2
0 1
0 2
0 3
0 4

correct output
2
0

user output
2
0

Test 3

Verdict: ACCEPTED

input
2 1
0 1

correct output
0
1
0 1

user output
0
1
0 1

Test 4

Verdict:

input
3 1
0 1
2 1

correct output
1
1
0 1

user output
0
1
1 2

Test 5

Verdict:

input
3 1
0 2
1 2

correct output
1
1
0 2

user output
0
1
1 2

Test 6

Verdict:

input
3 2
0 2
1 2

correct output
0
2
0 1

user output
0
1
1 2

Test 7

Verdict: ACCEPTED

input
4 1
0 3
0 1
3 2

correct output
2
1
0 3

user output
2
1
0 3

Test 8

Verdict: ACCEPTED

input
4 2
0 3
0 1
3 2

correct output
1
2
0 2

user output
1
2
1 3

Test 9

Verdict: ACCEPTED

input
4 3
0 3
0 1
3 2

correct output
0
3
1 2

user output
0
3
1 2

Test 10

Verdict:

input
4 1
0 1
0 2
0 3

correct output
2
0

user output
1
1
0 1

Test 11

Verdict:

input
4 2
0 1
0 2
0 3

correct output
1
2
1 2

user output
1
1
0 1

Test 12

Verdict:

input
4 3
0 1
0 2
0 3

correct output
1
2
1 2

user output
1
1
0 1

Test 13

Verdict:

input
6 3
0 1
0 2
0 3
2 4
...

correct output
2
2
2 3

user output
2
1
0 1

Test 14

Verdict:

input
6 3
0 1
0 2
0 3
2 4
...

correct output
2
1
0 2

user output
2
1
0 1

Test 15

Verdict: ACCEPTED

input
8 5
0 1
1 2
2 3
0 4
...

correct output
2
4
2 5

user output
2
4
2 5

Test 16

Verdict: ACCEPTED

input
2 1
0 1

correct output
0
1
0 1

user output
0
1
0 1

Test 17

Verdict:

input
3 1
2 1
0 2

correct output
1
1
0 2

user output
0
1
1 2

Test 18

Verdict: ACCEPTED

input
3 1
0 2
0 1

correct output
1
1
0 2

user output
1
1
0 1

Test 19

Verdict:

input
3 2
1 0
1 2

correct output
0
2
0 2

user output
0
1
1 2

Test 20

Verdict: ACCEPTED

input
3 2
0 1
0 2

correct output
0
2
1 2

user output
0
2
1 2

Test 21

Verdict:

input
4 1
2 1
2 0
1 3

correct output
2
1
0 2

user output
1
1
1 2

Test 22

Verdict:

input
4 1
2 0
0 3
1 0

correct output
2
0

user output
1
1
0 1

Test 23

Verdict:

input
4 2
3 0
1 2
2 3

correct output
1
2
0 2

user output
0
2
1 3

Test 24

Verdict:

input
4 2
1 0
0 3
0 2

correct output
1
2
1 3

user output
1
1
0 1

Test 25

Verdict:

input
4 3
3 0
3 2
2 1

correct output
0
3
0 1

user output
0
2
1 3

Test 26

Verdict:

input
4 3
1 0
3 0
2 0

correct output
1
2
1 3

user output
1
1
0 1

Test 27

Verdict: ACCEPTED

input
10 3
3 0
8 1
9 5
0 4
...

correct output
2
3
0 5

user output
2
3
0 5

Test 28

Verdict:

input
100 4
32 66
29 26
86 0
71 83
...

correct output
12
4
86 89

user output
8
1
62 49

Test 29

Verdict:

input
1000 1
155 994
213 449
582 440
277 0
...

correct output
22
1
1 330

user output
13
1
49 774

Test 30

Verdict:

input
2500 10
517 660
971 230
982 1721
2200 2124
...

correct output
23
4
294 943

user output
14
1
471 2196

Test 31

Verdict:

input
5000 1
1611 2785
2978 4796
3783 4548
1074 1256
...

correct output
34
1
0 1611

user output
19
1
152 1499

Test 32

Verdict:

input
5000 2
3110 2737
2365 2830
2914 874
3720 2637
...

correct output
30
2
844 1623

user output
18
1
199 860

Test 33

Verdict:

input
5000 4
664 4317
295 764
4857 1869
1111 1915
...

correct output
33
4
541 2936

user output
20
1
1036 2674

Test 34

Verdict:

input
5000 8
4033 4112
3295 1781
1623 933
2035 1665
...

correct output
30
7
2605 4351

user output
20
1
426 924

Test 35

Verdict:

input
5000 20
2304 353
834 2090
1767 72
3026 4211
...

correct output
26
12
1708 3762

user output
(empty)

Test 36

Verdict:

input
5000 100
1688 3447
496 2607
1054 2586
4259 2671
...

correct output
29
5
1379 2879

user output
(empty)

Test 37

Verdict:

input
5000 1000
638 3198
3452 4568
2723 2277
1947 4539
...

correct output
28
6
517 4411

user output
(empty)

Test 38

Verdict:

input
5000 2000
1451 4112
1730 1026
1556 1248
4723 678
...

correct output
28
6
82 4161

user output
(empty)

Test 39

Verdict:

input
5000 4000
3618 1301
2744 1363
1705 3118
2385 2886
...

correct output
28
11
1526 2510

user output
(empty)

Test 40

Verdict:

input
5000 4999
1647 992
3574 4278
2808 2380
3945 287
...

correct output
25
10
510 839

user output
(empty)

Test 41

Verdict:

input
100 4
48 94
54 34
25 31
12 16
...

correct output
18
3
13 24

user output
14
3
96 2

Test 42

Verdict:

input
1000 1
649 341
964 65
43 702
226 543
...

correct output
54
1
23 833

user output
30
1
106 583

Test 43

Verdict:

input
2500 10
2238 1206
1470 365
1938 1220
962 2009
...

correct output
51
10
333 1068

user output
31
1
700 143

Test 44

Verdict:

input
5000 1
1600 4821
4466 2988
261 1010
1777 2935
...

correct output
84
1
36 723

user output
43
1
4564 2457

Test 45

Verdict:

input
5000 2
2161 2849
1729 1347
1763 2560
2098 2899
...

correct output
112
2
1 1769

user output
57
1
1481 2315

Test 46

Verdict:

input
5000 4
3961 4831
2920 3199
4703 3118
201 1241
...

correct output
112
4
43 4157

user output
59
0

Test 47

Verdict:

input
5000 8
3226 1183
3536 3297
2501 261
3071 4107
...

correct output
122
8
133 2017

user output
67
1
787 3800

Test 48

Verdict:

input
5000 20
1221 3603
3259 3147
3676 1561
4574 962
...

correct output
86
20
128 2391

user output
54
1
1395 4490

Test 49

Verdict:

input
5000 100
50 2333
699 2904
4502 392
2177 3778
...

correct output
75
42
1627 3129

user output
(empty)

Test 50

Verdict:

input
5000 1000
1025 4349
3214 4639
4004 2506
652 4796
...

correct output
38
10
2964 4732

user output
(empty)

Test 51

Verdict:

input
5000 2000
4108 791
4770 1666
4203 4197
2566 728
...

correct output
48
19
2640 4559

user output
(empty)

Test 52

Verdict:

input
5000 4000
2183 3550
857 549
4752 3563
4198 4895
...

correct output
69
26
3244 4780

user output
(empty)

Test 53

Verdict:

input
5000 4999
4282 2328
4163 653
929 3214
3631 4207
...

correct output
79
26
2794 4878

user output
(empty)

Test 54

Verdict:

input
100 4
51 84
32 89
92 51
67 4
...

correct output
5
3
14 50

user output
5
1
8 73

Test 55

Verdict:

input
1000 1
942 999
402 534
533 278
228 908
...

correct output
10
1
0 968

user output
7
0

Test 56

Verdict:

input
2500 10
1639 991
640 223
1940 1067
801 257
...

correct output
12
2
2075 2395

user output
8
1
41 1055

Test 57

Verdict:

input
5000 1
1585 3293
3686 3851
1447 1604
392 2681
...

correct output
14
0

user output
8
1
179 2284

Test 58

Verdict:

input
5000 2
626 3760
2593 3177
1343 889
1377 596
...

correct output
14
0

user output
8
1
528 3637

Test 59

Verdict:

input
5000 4
1462 182
3060 4479
3021 4111
3145 2887
...

correct output
12
2
2219 3145

user output
8
1
370 4323

Test 60

Verdict:

input
5000 8
671 2837
3952 4186
828 1632
3885 2545
...

correct output
10
1
0 2405

user output
(empty)

Test 61

Verdict:

input
5000 20
3274 1781
3151 566
1298 1210
495 4010
...

correct output
14
0

user output
(empty)

Test 62

Verdict:

input
5000 100
487 1275
4234 2960
1502 3713
2471 819
...

correct output
10
1
0 4411

user output
(empty)

Test 63

Verdict:

input
5000 1000
2192 4468
4475 4665
81 4277
998 1960
...

correct output
12
1
0 910

user output
(empty)

Test 64

Verdict:

input
5000 2000
686 0
3311 3404
176 2362
119 2765
...

correct output
14
1
0 3007

user output
(empty)

Test 65

Verdict:

input
5000 4000
2848 3939
1514 2396
527 821
2586 4938
...

correct output
16
3
318 3675

user output
(empty)

Test 66

Verdict:

input
5000 4999
2128 1367
1616 1575
4936 3022
339 4210
...

correct output
10
0

user output
(empty)

Test 67

Verdict:

input
5000 4999
2858 558
4677 2444
3042 610
1950 4352
...

correct output
0
4999
0 1971

user output
(empty)

Test 68

Verdict: ACCEPTED

input
5000 4999
0 3957
0 2864
0 2018
2678 0
...

correct output
2
0

user output
2
0

Test 69

Verdict:

input
5000 1
2654 1880
2560 3683
4613 596
4860 1233
...

correct output
4998
1
0 1782

user output
4997
1
1 4266

Test 70

Verdict: ACCEPTED

input
5000 1
3762 0
0 2803
0 1387
610 0
...

correct output
2
0

user output
2
0

Test 71

Verdict:

input
10 4
3 0
8 4
5 7
3 8
...

correct output
3
4
3 5

user output
2
4
7 8

Test 72

Verdict:

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

correct output
2
5
2 6

user output
2
4
6 9