Submission #639076

#TimeUsernameProblemLanguageResultExecution timeMemory
639076AndreyRace (IOI11_race)C++14
100 / 100
1422 ms67232 KiB
#include "race.h" #include<bits/stdc++.h> using namespace std; int n,k,ans = INT_MAX; vector<pair<int,int>> haha[200001]; vector<int> st(200001); vector<bool> yeah(200001,true); int dfs(int a, int t) { int sb = 1; for(int i = 0; i < haha[a].size(); i++) { if(haha[a][i].first != t && yeah[haha[a][i].first]) { sb+=dfs(haha[a][i].first,a); } } st[a] = sb; return sb; } void calc(map<int,int>& wut, int a, int d, int sb, int t) { if(wut[k-sb] != 0 || k == sb) { ans = min(ans,wut[k-sb]+d); } for(int i = 0; i < haha[a].size(); i++) { if(yeah[haha[a][i].first] && haha[a][i].first != t) { calc(wut,haha[a][i].first,d+1,sb+haha[a][i].second,a); } } } void update(map<int,int>& wut, int a, int d, int sb, int t) { if(wut[sb] != 0) { wut[sb] = min(wut[sb],d); } else { wut[sb] = d; } for(int i = 0; i < haha[a].size(); i++) { if(yeah[haha[a][i].first] && haha[a][i].first != t) { update(wut,haha[a][i].first,d+1,sb+haha[a][i].second,a); } } } void dude(int a) { dfs(a,-1); int c = 0,p = a; while(p != -1) { c = p; p = -1; for(int i = 0; i < haha[c].size(); i++) { if(yeah[haha[c][i].first] && st[c] > st[haha[c][i].first] && st[haha[c][i].first] > st[a]/2) { p = haha[c][i].first; } } } map<int,int> wut; wut[0] = 0; for(int i = 0; i < haha[c].size(); i++) { if(yeah[haha[c][i].first]) { calc(wut,haha[c][i].first,1,haha[c][i].second,c); update(wut,haha[c][i].first,1,haha[c][i].second,c); } } yeah[c] = false; for(int i = 0; i < haha[c].size(); i++) { if(yeah[haha[c][i].first]) { dude(haha[c][i].first); } } yeah[c] = true; } int best_path(int N, int K, int H[][2], int L[]) { n = N; k = K; for(int i = 0; i < n-1; i++) { haha[H[i][0]].push_back({H[i][1],L[i]}); haha[H[i][1]].push_back({H[i][0],L[i]}); } dude(0); if(ans == INT_MAX) { ans = -1; } return ans; }

Compilation message (stderr)

race.cpp: In function 'int dfs(int, int)':
race.cpp:11:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |     for(int i = 0; i < haha[a].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~
race.cpp: In function 'void calc(std::map<int, int>&, int, int, int, int)':
race.cpp:24:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int i = 0; i < haha[a].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~
race.cpp: In function 'void update(std::map<int, int>&, int, int, int, int)':
race.cpp:38:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for(int i = 0; i < haha[a].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~
race.cpp: In function 'void dude(int)':
race.cpp:51:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for(int i = 0; i < haha[c].size(); i++) {
      |                        ~~^~~~~~~~~~~~~~~~
race.cpp:59:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(int i = 0; i < haha[c].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~
race.cpp:66:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |     for(int i = 0; i < haha[c].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...