Submission #60039

#TimeUsernameProblemLanguageResultExecution timeMemory
60039FedericoSPort Facility (JOI17_port_facility)C++14
22 / 100
96 ms16916 KiB
#include <bits/stdc++.h>
using namespace std;

int N;
int B[4005],A[4005];
vector<int> grafo[4005];
bool V[4005];
bool C[4005];
int cont;
bool flag=true;
int pot[4005];
int M=1000000007;

void DFS(int k){

	for(int f:grafo[k])
		if(V[f] and C[f]==C[k])
			flag=false;

	for(int f:grafo[k])
		if(!V[f])
		{
			V[f]=true;
			C[f]=!C[k];
			DFS(f);
		}

}

bool isNem(int x, int y){
	if(A[x]<A[y])
		swap(x,y);
	return !(B[x]<B[y] or A[x]>B[y]);
}

int main(){

	cin>>N;
	for(int i=0;i<N;i++)
		cin>>A[i]>>B[i];

	pot[0]=1;
	for(int i=1;i<N+2;i++)
		pot[i]=(2*pot[i-1])%M;

	for(int i=0;i<N;i++)
		for(int j=i+1;j<N;j++)
			if(isNem(i,j)){
				grafo[i].push_back(j);
				grafo[j].push_back(i);
			}

	for(int i=0;i<N;i++)
		if(!V[i]){
			V[i]=true;
			cont++;
			DFS(i);
		}

	if(flag)
		cout<<pot[cont];
	else
		cout<<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...