# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
213192 | patrikpavic2 | Port Facility (JOI17_port_facility) | C++17 | 6101 ms | 58616 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <algorithm>
#include <vector>
#define PB push_back
#define X first
#define Y second
using namespace std;
typedef pair < int, int > pii;
const int N = 1e6 + 500;
const int MOD = 1e9 + 7;
vector < pii > v[N];
int col[N], bio[N], mog = 1, n;
int L[N], R[N], id[2 * N], str[N];
void dodaj(int x,int y,int razl = 1){
v[x].PB({y, razl});
v[y].PB({x, razl});
}
void dfs(int x){
if(bio[x]) return;
bio[x] = 1;
for(pii nxt : v[x]){
if(bio[nxt.X] && (col[x] ^ col[nxt.X]) != nxt.Y)
mog = 0;
if(!bio[nxt.X]){
col[nxt.X] = col[x] ^ nxt.Y;
dfs(nxt.X);
}
}
}
int main(){
scanf("%d", &n);
for(int i = 1;i <= n;i++){
scanf("%d%d", L + i, R + i);
id[L[i]] = i, id[R[i]] = i;
str[R[i]] = 1;
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(L[i] < L[j] && R[i] < R[j] && R[i] > L[j])
dodaj(i, j);
}
}
int komp = 0;
for(int i = 1;i <= n;i++){
komp += !bio[i]; dfs(i);
}
int sol = 1;
for(;komp--;) sol = (sol + sol) % MOD;
printf("%d\n", sol * mog);
}
컴파일 시 표준 에러 (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... |