Submission #1222553

#TimeUsernameProblemLanguageResultExecution timeMemory
1222553lambd47Port Facility (JOI17_port_facility)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define int long long using namespace std; #define L(i, j, k) for(int i = (j); i <= (k); ++i) #define R(i, j, k) for(int i = (j); i >= (k); --i) std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count()); const int MOD=1e9+7; void solve() { int n;cin>>n; vector<vector<int>> adj(n); vector<int> evs(2*n); vector<pair<int,int>> vec(n); L(i,0,n-1){ cin>>vec[i].first>>vec[i].second; vec[i].first--;vec[i].second--; evs[vec[i].first]=evs[vec[i].second]=i; } set<pair<int,int>> ativo; L(i,0,2*n-1){ int id=evs[i]; if(vec[id].first==i){//entrou auto pt=ativo.lower_bound({vec[id].first+1,0}); if(pt!=ativo.end()){ auto[x,v]=*pt; if(x<vec[id].second){ adj[v].push_back(id); adj[id].push_back(v); } } ativo.insert({vec[id].second,id}); }else{ ativo.erase({i,id}); } } vector<int> cor(n,-1); auto dfs=[&](auto&& self, int node)->void{ for(auto a:adj[node]){ if(cor[a]!=-1)continue; cor[a]=cor[node]^1; self(self,a); } }; int resp=1; L(i,0,n-1){ if(cor[i]==-1){ cor[i]=0; resp*=2; resp%=MOD; dfs(dfs,i); } } stack<int> st[2]; L(i,0,2*n-1){ int id=evs[i]; if(vec[id].first==i){//entra st[cor[id]].push(id); }else{ if(st[cor[id]].top()!=id){ cout<<0<<endl;return; } st[cor[id]].pop(); } } cout<<resp<<endl; } int32_t main() { std::cin.tie(0)->sync_with_stdio(0); std::cin.exceptions(std::cin.failbit); int T = 1; // std::cin >> T; while(T--) { solve(); } 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...