Submission #77130

#TimeUsernameProblemLanguageResultExecution timeMemory
77130muradeynRace (IOI11_race)C++14
0 / 100
4 ms2680 KiB
#include "race.h" #include <bits/stdc++.h> #define intt long long #define FAST_READ ios_base::sync_with_stdio(0);cin.tie(0); #define SIZE 100001 #define INF INT_MAX #define F first #define S second #define in(a) scanf("%d",&a); #define outn(a) printf("%d\n",&a); #define outs(a) printf("%d ",&a); using namespace std; int root , n , k , x , y , w , used[SIZE] , dp[SIZE] , co , cent = -1 , we , ans = -1; vector< pair<int,int> >v[SIZE]; map< int , int > mp; bool f = true; void init() { for (int i = 1;i<=n;i++) { if (used[i] < 3 && used[i] > 0)used[i] = 0; } } void dfs(int s,int p) { co++; used[s]++; int sz = v[s].size(); for (int i = 0;i<sz;i++) { int to = v[s][i].first; int cost = v[s][i].second; if (to == p)continue; if (used[to] >= 1)continue; we += cost; dfs(to,s); } } void dfs2(int s,int p) { used[s]++; dp[s] = 1; bool f = true; int sz = v[s].size(); for (int i = 0;i<sz;i++) { int to = v[s][i].first; int cost = v[s][i].second; if (used[to] >= 2)continue; dfs2(to,s); if (dp[to] > co / 2) f = false; dp[s] += dp[to]; } if (f && cent == -1 && co - dp[s] <= co / 2) cent = s; } void dfs3(int s,int p,int len,int cst) { used[s] = 1; if (cst == k) { if (ans == -1)ans = len; else ans = min(ans,len); return; } int sz = v[s].size(); for (int i = 0;i<sz;i++) { int to = v[s][i].first; int cost = v[s][i].second; if (to == p)continue; if (used[to] >= 1)continue; dfs3(to,s,len + 1,cst + cost); } } void dfs4(int s,int p,int len,int cst) { used[s] = 2; bool f = false; if (cst > k)return; if (cst == k) { if (ans == -1)ans = len; else ans = min(ans,len); return; } else if (mp[k - cst] != 0) { if (ans == -1)ans = len + mp[k - cst]; else ans = min(ans,len + mp[k - cst]); return; } int sz = v[s].size(); for (int i = 0;i<sz;i++) { int to = v[s][i].first; int cost = v[s][i].second; if (to == p)continue; if (used[to] >= 2)continue; dfs4(to,s,len + 1,cst + cost); } if (mp[cst] == 0)mp[cst] = len; else if (mp[cst] > len)mp[cst] = min(mp[cst],len); } int best_path(int N, int K, int h[][2], int l[]) { k = K; n = N; for (int i = 0;i<n - 1;i++) { x = h[i][0]; y = h[i][1]; x++; y++; v[x].push_back({y,l[i]}); v[y].push_back({x,l[i]}); } while (f) { f = false; init(); for (int i = 1;i<=n;i++) { if (used[i] == 0) { co = 0; we = 0; dfs(i , -1); if (we < k || co == 1)continue; dp[i] = 0; cent = -1; dfs2(i,-1); if (cent == -1)continue; f = true; init(); root = cent; dfs3(cent,-1,0,0); mp.clear(); dfs4(cent,-1,0,0); used[cent] = 3; } } } return ans; }

Compilation message (stderr)

race.cpp: In function 'void dfs2(int, int)':
race.cpp:51:13: warning: unused variable 'cost' [-Wunused-variable]
         int cost = v[s][i].second;
             ^~~~
race.cpp: In function 'void dfs4(int, int, int, int)':
race.cpp:79:10: warning: unused variable 'f' [-Wunused-variable]
     bool f = false;
          ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...