Submission #1213862

#TimeUsernameProblemLanguageResultExecution timeMemory
1213862VMaksimoski008Port Facility (JOI17_port_facility)C++20
0 / 100
10 ms23872 KiB
#include <bits/stdc++.h>
#define ar array
//#define int long long

using namespace std;

using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int mod = 1e9 + 7;
const ll inf = 1e18;
const int N = 1e6 + 5;

ll ans = 1;
int n, col[N], l[N], r[N];
vector<int> g[N];

void dfs(int u, int c) {
    col[u] = c;
    for(int v : g[u]) {
        if(col[v]) {
            if(col[v] == c) ans = 0;
            continue;
        }
        dfs(v, 3^c);
    }
}

signed main() {
    cin >> n;   
    for(int i=1; i<=n; i++) cin >> l[i] >> r[i];

    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            if(l[i] < l[j] && r[i] < r[j] && l[j] < r[i]) {
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }

    for(int i=1; i<=n; i++) {
        if(col[i]) continue;
        dfs(i, 1);
        ans = ans * 2 % mod;
    }

    int cyc = 1e9;
    for(int i=1; i<=1; i++) {
        queue<pii> q;
        q.push({ 1, 1 });
        vector<int> d(n+1, 1e9);
        d[1] = 0;

        while(!q.empty()) {
            auto [u, p] = q.front(); q.pop();
            for(int v : g[u]) {
                if(d[v] == 1e9) {
                    d[v] = d[u] + 1;
                    q.push({ v, u});
                } else {
                    // cout << i << " " << u << " " << v << endl;
                    if(v != p) cyc = min(cyc, d[u] + d[v] + 1);
                }
            }
        }
    }

    if(cyc == 1e9) cyc = 0;
    assert(cyc <= 3);
    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...