Submission #1041361

#TimeUsernameProblemLanguageResultExecution timeMemory
1041361sssamuiSirni (COCI17_sirni)C++17
140 / 140
985 ms750232 KiB
#include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <set> using namespace std; vector<int> p(1e5); int rt(int node) { if (p[node] == node) return node; return p[node] = rt(p[node]); } void join(int a, int b) { p[rt(a)] = rt(b); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; set<int> ps; while (n--) { int p; cin >> p; ps.insert(p); } vector<int> fps(0); for (int p : ps) fps.push_back(p); n = fps.size(); for (int i = 0; i < n; i++) p[i] = i; int lgst = fps.back(); vector<int> nxtlg(lgst + 1, -1); for (int i = 0; i < n; i++) nxtlg[fps[i]] = i; for (int i = lgst - 1; i > -1; i--) if (nxtlg[i] == -1) nxtlg[i] = nxtlg[i + 1]; vector<vector<pair<int, int>>> edg(lgst + 1); for (int i = 0; i < n - 1; i++) { edg[fps[i + 1] % fps[i]].push_back({ i, i + 1 }); for (int np = 2 * fps[i]; np <= lgst; np += fps[i]) { int nxt = nxtlg[np]; edg[fps[nxt] % fps[i]].push_back({ i, nxt }); } } int ans = 0; for (int i = 0; i <= lgst; i++) for (pair<int, int> eg : edg[i]) if (rt(eg.first) != rt(eg.second)) { ans += i; join(eg.first, eg.second); } cout << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...