Submission #114218

#TimeUsernameProblemLanguageResultExecution timeMemory
114218evpipisPort Facility (JOI17_port_facility)C++17
22 / 100
6079 ms366888 KiB
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back
#define mp make_pair
typedef pair<int, int> ii;

const int len = 2e5+5, mod = 1e9+7;
int order[len], vis[len];
ii ran[len];
vector<int> adj[len], st;

int dfs(int u, int t){
    vis[u] = t;

    int ans = 1;
    for (int j = 0; j < adj[u].size(); j++){
        int v = adj[u][j];
        if (vis[v] == t)
            ans = 0;
        if (vis[v] == -1)
            ans *= dfs(v, 1-t);
    }

    //printf("dfs(%d, %d) = %d\n", u, t, ans);
    return ans;
}

int main(){
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++){
        scanf("%d %d", &ran[i].fi, &ran[i].se);
        order[ran[i].fi] = -i;
        order[ran[i].se] = i;
    }

    for (int i = 1; i <= 2*n; i++){
        int cur = order[i];
        if (cur > 0){
            int pos = st.size()-1;
            while (st[pos] != cur){
                adj[cur].pb(st[pos]);
                adj[st[pos]].pb(cur);
                //printf("edge: %d, %d\n", cur, st[pos]);
                pos--;
            }

            st.erase(st.begin()+pos);
        }
        else{
            cur = -cur;
            st.pb(cur);
        }
    }

    for (int i = 1; i <= n; i++)
        vis[i] = -1;

    int po = 0, no = 0;
    for (int i = 1; i <= n; i++){
        if (vis[i] != -1)
            continue;

        if (dfs(i, 0))
            po++;
        else
            no = 1;
    }

    if (no){
        printf("0\n");
    }
    else{
        int temp = 1;
        for (int i = 0; i < po; i++)
            temp = (2*temp)%mod;
        printf("%d\n", temp);
    }
    return 0;
}

Compilation message (stderr)

port_facility.cpp: In function 'int dfs(int, int)':
port_facility.cpp:19:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int j = 0; j < adj[u].size(); j++){
                     ~~^~~~~~~~~~~~~~~
port_facility.cpp: In function 'int main()':
port_facility.cpp:33:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &n);
     ~~~~~^~~~~~~~~~
port_facility.cpp:35:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &ran[i].fi, &ran[i].se);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...