# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1225979 | _rain_ | Port Facility (JOI17_port_facility) | C++20 | 963 ms | 160928 KiB |
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD=1e9+7;
const int N=(int)1e6;
int mul(int a,int b){
return (LL)a*b%MOD;
}
int n;
pair<int,int>p[N+2];
namespace subtask2{
bool check(){
return true;
}
const int LIMIT=2*N;
int par[LIMIT+2],id[LIMIT+2],pre[LIMIT+2],nxt[LIMIT+2],v[LIMIT+2];
int Find(int x){
return par[x]==x?par[x]:par[x]=Find(par[x]);
}
vector<int>ke[LIMIT+2];
void add_canh(int u,int v){
ke[u].push_back(v),ke[v].push_back(u);
return;
}
int vis[N+2];
bool dfs(int u){
for(auto&v:ke[u]){
if (vis[v]==0){
vis[v]=-vis[u];
if (dfs(v)==false) return false;
}
else if (vis[u]==vis[v]) return false;
}
return true;
}
void main_code(){
for(int i=1;i<=N+1;++i) par[i]=i,nxt[i]=i;
for(int i=1;i<=n;++i) id[p[i].first]=id[p[i].second]=i;
int cnt=0,comp=0;
for(int i=1;i<=2*n;++i){
if (id[i]==0) continue;
if (pre[id[i]]==0) pre[id[i]]=++cnt,v[cnt]=id[i];
else {
int u=pre[id[i]];
par[u]=Find(u+1);
for(int j=par[u],k; j<=cnt;j=k){
add_canh(v[j],id[i]);
k=Find(nxt[j]+1);
nxt[j]=cnt;
}
}
}
for(int i=1;i<=n;++i) if (vis[i]==0){
vis[i]=1;
if (dfs(i)) ++comp;
else {
cout<<0<<'\n';
return;
}
}
int ans=1;
for(int i=1;i<=comp;++i) ans=mul(ans,2);
cout<<ans<<'\n';
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
#define task "main"
if (fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin>>n;
for(int i=1;i<=n;++i) cin>>p[i].first>>p[i].second;
return subtask2::main_code(),0;
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |