Submission #444704

#TimeUsernameProblemLanguageResultExecution timeMemory
444704penguinhackerChecker (COCI19_checker)C++14
110 / 110
720 ms95892 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array const int mxN=2e5; int n; string s; ar<int, 3> e[mxN]; set<ar<ll, 2>> seen; vector<int> f[mxN]; int l[mxN]; multiset<int> seg; set<ar<int, 2>> adj[mxN]; int tr; void add(int i, int j, int c) { adj[i].insert({j, c}); adj[j].insert({i, c}); } set<ar<int, 2>>::iterator gt(int i, int j) { auto it=adj[i].lower_bound({j}); assert(it!=adj[i].end()&&(*it)[0]==j); return it; } void rem(int u) { ++tr; int i=(*adj[u].begin())[0], j=(*adj[u].rbegin())[0]; int c1=(*adj[u].begin())[1], c2=(*adj[u].rbegin())[1]; adj[u].clear(); adj[i].erase(gt(i, u)); adj[j].erase(gt(j, u)); gt(i, j); int c3=(*gt(j, i))[1]; if (c1==c2||c1==c3||c2==c3) { cout << "neispravno bojenje"; exit(0); } if (adj[i].size()==2) rem(i); if (adj[j].size()==2) rem(j); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> n >> s; for (int i=0; i<n-3; ++i) { cin >> e[i][0] >> e[i][1] >> e[i][2], --e[i][0], --e[i][1]; if (e[i][0]>e[i][1]) swap(e[i][0], e[i][1]); if (seen.count({e[i][0], e[i][1]})) { // double edge??? bad.. cout << "neispravna triangulacija"; return 0; } seen.insert({e[i][0], e[i][1]}); f[e[i][0]].push_back(e[i][1]); ++l[e[i][1]]; } for (int i=0; i<n; ++i) { while(l[i]--) { auto it=seg.find(i); assert(it!=seg.end()); seg.erase(it); } assert(seg.empty()||*seg.begin()>i); for (int j : f[i]) if (seg.size()&&j>*seg.begin()) { cout << "neispravna triangulacija"; return 0; } for (int j : f[i]) seg.insert(j); } for (int i=0; i<n; ++i) add(i, (i+1)%n, s[i]-'0'); for (int i=0; i<n-3; ++i) add(e[i][0], e[i][1], e[i][2]); for (int i=0; i<n; ++i) if (adj[i].size()==2) rem(i); assert(tr==n-2); cout << "tocno"; 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...