Submission #165347

#TimeUsernameProblemLanguageResultExecution timeMemory
165347SegtreeSimurgh (IOI17_simurgh)C++14
51 / 100
399 ms3520 KiB
#include<iostream> #include<vector> #include<unordered_set> #include<unordered_map> #include"simurgh.h" using namespace std; typedef long long ll; typedef pair<ll,ll> P; #define chmin(a,b) a=min(a,b) #define chmax(a,b) a=max(a,b) #define N 250 vector<P> g[N]; unordered_set<int> vis; vector<int> edges; int blg[N]; void dfs(ll x,ll eid,ll root){ if(vis.find(x)!=vis.end())return; vis.insert(x); if(-1!=eid)edges.push_back(eid); blg[x]=root; for(auto y:g[x]){ dfs(y.first,y.second,root); } } int isans[N*N]; vector<int> find_roads(int n,vector<int> u,vector<int> v){ for(int i=0;i<u.size();i++){ g[u[i]].push_back(make_pair(v[i],i)); g[v[i]].push_back(make_pair(u[i],i)); isans[i]=-1; } vector<int> ans; for(int i=0;i<n;i++){ edges.clear(); vis.clear(); vis.insert(i); for(int j=0;j<n;j++){ dfs(j,-1,j); } unordered_map<ll,vector<int> >mas; for(auto e:g[i]){ mas[blg[e.first]].push_back(e.second); } for(auto v:mas){ for(auto vv:mas){ if(v!=vv)edges.push_back(vv.second[0]); } int ma=-1; unordered_map<int,int> sav; int resu=-1,resd=-1; for(auto e:v.second){ edges.push_back(e); //if(edges.size()<n-1)cout<<1/0<<endl; if(isans[e]==1){ if(resu==-1)resu=count_common_roads(edges); sav[e]=resu; } if(isans[e]==0){ if(resd==-1)resd=count_common_roads(edges); sav[e]=resd; } if(isans[e]==-1){ sav[e]=count_common_roads(edges); } chmax(ma,sav[e]); edges.pop_back(); } for(auto e:v.second){ if(sav[e]==ma){ if(isans[e]==-1)ans.push_back(e); isans[e]=1; } else isans[e]=0; } for(auto vv:mas){ if(v!=vv)edges.pop_back(); } } } if(ans.size()!=n-1)cout<<1/0<<endl; return ans; }

Compilation message (stderr)

simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:30:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<u.size();i++){
                 ~^~~~~~~~~
simurgh.cpp:83:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(ans.size()!=n-1)cout<<1/0<<endl;
        ~~~~~~~~~~^~~~~
simurgh.cpp:83:31: warning: division by zero [-Wdiv-by-zero]
     if(ans.size()!=n-1)cout<<1/0<<endl;
                              ~^~
#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...