Submission #889190

#TimeUsernameProblemLanguageResultExecution timeMemory
889190Muhammad_AneeqShortcut (IOI16_shortcut)C++17
0 / 100
9 ms26456 KiB
#include <vector> #include <set> using namespace std; int const N=1e6+10; vector<pair<int,int>>nei[N]={}; long long dis[N]={}; int vis[N]={}; long long ans=1e17+10; int ns; long long bfs(int x) { for (int i=0;i<ns;i++) { vis[i]=0; dis[i]=1e17+10; } dis[x]=0; set<pair<int,int>>s; s.insert({0,x}); while (s.size()) { int x=(*begin(s)).second; s.erase(*begin(s)); if (vis[x]) continue; vis[x]=1; for (auto i:nei[x]) { if (dis[i.first]>dis[x]+i.second) { s.erase({dis[i.first],i.first}); dis[i.first]=dis[x]+i.second; s.insert({dis[i.first],i.first}); } } } long long z=0; for (int i=0;i<ns;i++) z=max(z,dis[i]); return z; } void find() { long long f=0; for (int i=0;i<ns;i++) { long long z=bfs(i); f=max(f,z); } ans=min(ans,f); } long long find_shortcut(int n,vector<int>l,vector<int>d,int c) { for (int i=0;i<n-1;i++) { nei[i].push_back({i+1,l[i]}); nei[i+1].push_back({i,l[i]}); } ns=n; for (int i=0;i<n;i++) { if (d[i]) { nei[i].push_back({ns,d[i]}); nei[ns].push_back({i,d[i]}); ns++; } } for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) { nei[i].push_back({j,c}); nei[j].push_back({i,c}); find(); nei[i].pop_back(); nei[j].pop_back() ; } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...