Submission #1174885

#TimeUsernameProblemLanguageResultExecution timeMemory
1174885ThylOneSimurgh (IOI17_simurgh)C++20
0 / 100
61 ms2752 KiB
#include "simurgh.h" #include <algorithm> #include<bits/stdc++.h> #include <unordered_map> using namespace std; struct UF{ vector<int> chef; UF(int n){ chef.resize(n); for(int i=0;i<n;i++)chef[i]=i; } int find(int a){ if(chef[a]==a)return a; return chef[a] = find(chef[a]); } void fusion(int a, int b){ a = find(a); b = find(b); if(a!=b){ chef[a]=b; } } }; std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) { vector<pair<int,int>> edges; for(int i= 0;i<u.size();i++){ edges.push_back(make_pair(u[i], v[i])); } vector<int> re(u.size(),0); vector<bool> done(u.size(),false); vector<int> maxi(n,-n), mini(n,n+1); vector<int> golden[n]; for(int node = 0 ; node < n ; node++){ UF uf(n); vector<int> totest, spanning; for(int i=0;i<u.size();i++){ auto e = edges[i]; if(e.first != node && e.second != node){ if(uf.find(e.first)!=uf.find(e.second)){ uf.fusion(e.first,e.second); spanning.push_back(i); } }else{ if(!done[i]){ totest.push_back(i); done[i]=true; } } } if(golden[node].size()){ totest.push_back(golden[node].back()); } for(auto &t:totest){ vector<int> cspanning(spanning); cspanning.push_back(t); re[t] = count_common_roads(cspanning); maxi[node] = max(maxi[node], re[t]); } for(auto &t:totest){ if(re[t]==maxi[node]){ golden[edges[t].first].push_back(t); golden[edges[t].second].push_back(t); } } } set<int> ans; for(int i=0;i<n;i++){ for(int &u:golden[i]){ ans.insert(u); } } vector<int> out; for(int u:ans)out.push_back(u); return out; }
#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...