Submission #1317128

#TimeUsernameProblemLanguageResultExecution timeMemory
1317128nikaa123Comparing Plants (IOI20_plants)C++20
0 / 100
3 ms5192 KiB
#include <bits/stdc++.h> #include "plants.h" using namespace std; int n; vector <vector<int>> v(200005); vector <bitset<200005>> b(200005,0); void init(int k, std::vector<int> r) { n = r.size(); for (int i = 0; i < n; i++) { if (r[i] == 0) { for (int j = i+1; j <= i+k-1; j++) { int id = j%n; v[i].emplace_back(id); } } else { for (int j = i+1; j <= i+k-1; j++) { int id = j%n; v[id].emplace_back(i); } } } auto toposort = [](int n, vector <vector<int>>& v) { vector <int> indeg(n+5,0); for (int i = 0; i < n; i++) { for (auto to:v[i]) { indeg[to]++; } } queue <int> q; for (int i = 0; i < n; i++) { if (indeg[i] == 0) { q.push(i); } } vector <int> res; while (!q.empty()) { int f = q.front(); q.pop(); res.emplace_back(f); for (auto to:v[f]) { if (--indeg[to] == 0) { q.push(to); } } } reverse(res.begin(),res.end()); return res; }; vector <int> res = toposort(n,v); for (int i1 = 0; i1 < res.size(); i1++) { int i = res[i1]; b[i].set(i); for (auto to:v[i]) { b[i] |= b[to]; } } } int compare_plants(int x, int y) { if (b[x][y] == 1) { return 1; } if (b[y][x] == 1) { return -1; } return 0; }
#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...