Submission #1177433

#TimeUsernameProblemLanguageResultExecution timeMemory
1177433ASN49KPort Facility (JOI17_port_facility)C++20
22 / 100
6091 ms21316 KiB
#include <bits/stdc++.h>
#define all(x) x.begin(),x.end()

std::mt19937 rng(69);
#define UNUSED -1
const int N_MAX=200'000;
const int mod=1e9+7;
bool intersect(std::pair<int,int>a,std::pair<int,int>b)
{
    if(a.first>b.first)
    {
        std::swap(a,b);
    }
    return b.first<=a.second && a.second<=b.second;
}

int viz[N_MAX];
std::vector<int>adj[N_MAX];

void dfs(int nod,int val)
{
    if(viz[nod]!=-1)
    {
        return;
    }
    viz[nod]=val;
    for(auto &c:adj[nod])
    {
        dfs(c,val^1);
    }
}
int main()
{
    //freopen("input.txt","r",stdin);
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    int n;
    std::cin>>n;
    std::vector<std::pair<int,int>>a(n);
    for(auto &c:a)
    {
        std::cin>>c.first>>c.second;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(intersect(a[i] , a[j]))
            {
                //std::cout<<i<<' '<<j<<'\n';
                adj[i].push_back(j);
                adj[j].push_back(i);
            }
        }
    }
    std::fill(viz,viz+n,-1);
    int rez=1;
    for(int i=0;i<n;i++)
    {
        if(viz[i]==-1)
        {
            dfs(i,0);
            rez*=2;
            rez%=mod;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(auto &c:adj[i])
        {
            if(viz[i]==viz[c])
            {
                rez=0;
            }
        }
    }
    std::cout<<rez<<'\n';

    return 0;
}
/*
6 6
1 2 4
1 6 5
4 1
1 1 5
1 1 6
4 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...