Submission #1275471

#TimeUsernameProblemLanguageResultExecution timeMemory
1275471zagaroDreaming (IOI13_dreaming)C++20
18 / 100
30 ms12272 KiB
#include<bits/stdc++.h> #include "dreaming.h" #include<ext/pb_ds/assoc_container.hpp> /**zagaro & lauren <3**/ #define mod 1000000007 //1e9 + 7 #define pi acos(-1) #define wl while #define str string #define ENDL "\n" #define sal ' ' #define tp_set ll #define prc(n) cout.precision(n);cout<<fixed; #define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update> typedef long long ll; typedef bool bl; typedef char car; using namespace std; using namespace __gnu_pbds; ll n, m, l; vector<vector<pair<ll,ll> > > adj; vector<bl> vis; vector<pair<ll,ll> > may; void dfs(ll nod, ll par){ vis[nod] = true; for(int i=0;i<adj[nod].size();i++){ if(adj[nod][i].first != par){ dfs(adj[nod][i].first, nod); if(may[adj[nod][i].first].first + adj[nod][i].second > may[nod].first){ may[nod].second = may[nod].first; may[nod].first = may[adj[nod][i].first].first + adj[nod][i].second; } else if(may[adj[nod][i].first].first + adj[nod][i].second > may[nod].second){ may[nod].second = may[adj[nod][i].first].first + adj[nod][i].second; } } } return ; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { ll nod, par, a, val, r=0, w, t, q; n=N;m=M;l=L; q = n-1-m; adj.assign(n, vector<pair<ll,ll> > (0, {0, 0})); vis.assign(n, false); may.assign(n, {0,0}); for(int i=0;i<M;i++){ adj[A[i]].push_back({B[i], T[i]}); adj[B[i]].push_back({A[i], T[i]}); } queue<tuple<ll,ll,ll> > pq; vector<ll> vec; for(int i=0;i<n;i++){ if(!vis[i]){ dfs(i, -1); r = may[i].first; for(int j=0;j<adj[i].size();j++)pq.push({adj[i][j].first, i, adj[i][j].second}); wl(!pq.empty()){ tie(nod, par, val) = pq.front(); pq.pop(); if(may[par].first == may[nod].first+val)a=may[par].second; else a=may[par].first; a += val; if(a > may[nod].first){ may[nod].second = may[nod].first; may[nod].first = a; } else if(a > may[nod].second)may[nod].second = a; r = min(r, may[nod].first); for(int j=0;j<adj[nod].size();j++){ if(adj[nod][j].first != par){ pq.push({adj[nod][j].first, nod, adj[nod][j].second}); } } } vec.push_back(r); } } t = vec.size()-1; sort(vec.begin(), vec.end()); if(q == 0)w=vec[0]; else if(q == 1)w = vec[0] + vec[1] + l; else w = max(vec[t] + vec[t-1] + l, vec[t-1]+vec[t-2]+2*l); return w; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...