제출 #1185928

#제출 시각아이디문제언어결과실행 시간메모리
1185928lambd47Port Facility (JOI17_port_facility)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define int long long using namespace std; std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count()); const int MOD=1e9+7; void solve() { int n;cin>>n; vector<int> l(n),r(n); vector<int> evs(2*n); vector<int> sai(2*n,-1); vector<int> invr(2*n); for(int i=0;i<n;i++){ cin>>l[i]>>r[i]; l[i]--; r[i]--; invr[r[i]]=i; } sort(r.begin(),r.end(),[&](int a, int b){ return l[invr[a]]<l[invr[b]]; }); sort(l.begin(),l.end()); vector<vector<int>> adj(n); for(int i=0;i<n;i++){ sai[r[i]]=i; } for(int i=0;i<n;i++){ evs[l[i]]=i+1; evs[r[i]]=-i-1; } stack<int> st; vector<bool> tirei(n,0); for(int j=0,i=0;i<2*n;i++){ if(sai[i]!=-1){ if(tirei[sai[i]])continue; int bst=-1; int d=-1; while(!st.empty() && st.top()!=sai[i]){ adj[sai[i]].push_back(st.top()); adj[st.top()].push_back(sai[i]); if(r[st.top()]>d){ bst=st.top(); d=r[bst]; } tirei[st.top()]=1; st.pop(); } if(!st.empty() && st.top()==sai[i])st.pop(); if(bst!=-1){ st.push(bst); tirei[bst]=0; } } if(l[j]==i){ st.push(j); j++; } } vector<bool> vis(n,0); vector<int> cor(n,0); auto dfs=[&](auto&& self,int node)->void{ vis[node]=1; for(auto a: adj[node]){ if(vis[a])continue; cor[a]=cor[node]^1; self(self,a); } }; int c=0; for(int i=0;i<n;i++){ if(!vis[i]){ dfs(dfs,i); c++; } } int resp=1; int pat=2; for(int i=0;i<25;i++){ if(c&(1<<i)){ resp*=pat; resp%=MOD; } pat*=pat; pat%=MOD; } stack<int> s[2]; for(int i=0;i<2*n;i++){ if(evs[i]>0){ int a=--evs[i]; s[cor[a]].push(a); } if(evs[i]<0){ int a=++evs[i]; a=-a; if(s[cor[a]].top()!=a){ cout<<0;return; } s[cor[a]].pop(); } } cout<<resp<<endl; return; for(int i=0;i<n;i++){ for(auto a: adj[i]){ cout<<a<<" "; } cout<<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...