답안 #63223

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
63223 2018-08-01T06:26:18 Z 김세빈(#1833) Alternating Current (BOI18_alternating) C++11
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>

using namespace std;

typedef pair <int, int> pii;

vector <int> L[101010], V[101010];
vector <int> X[101010], Y[101010];
set <int> S;
pii P[101010];
int chk[101010], ans[101010];
int fff[101010];
int n, m;

void die() { printf("impossible\n"); exit(0); }

void dfs(int p, int c)
{
	chk[p] = 2; ans[p] = c;
	for(int &t: V[p]){
		if(chk[t] == 1) dfs(t, !c);
		else if(ans[t] == ans[p]) die();
	}
}

int main()
{
	int i, s, e, x, y, a, b;
	
	scanf("%d%d", &n, &m);
	
	for(i=1; i<=m; i++){
		scanf("%d%d", &a, &b);
		b ++; if(b > n) b -= n;
		P[i] = pii(a, b);
		if(a < b){
			L[a].push_back(i);
			L[b].push_back(-i);
		}
		else{
			L[1].push_back(i);
			L[b].push_back(-i);
			L[a].push_back(i);
		}
	}
	
	for(i=1; i<=n; i++){
		for(int &t: L[i]){
			if(t > 0) S.insert(t);
			else S.erase(-t);
		}
		
		if(S.size() == 2){
			a = *S.begin(); b = *next(S.begin());
			V[a].push_back(b);
			V[b].push_back(a);
			chk[a] = 1; chk[b] = 1;
		}
		else if(S.size() == 1) die();
	}
	
	for(i=1; i<=m; i++){
		if(chk[i] == 1) dfs(i, 0);
	}
	
	x = 1;
	
	for(i=1; i<=m; i++){
		if(chk[i]){
			if(ans[i] == 1) x = i;
		}
	}
	
	ans[x] = 1;
	s = P[x].first;
	
	for(i=1; i<=m; i++){
		P[i].first = (P[i].first - s + n) % n + 1;
		P[i].second = (P[i].second - s + n) % n + 1;
		if(P[i].first >= P[i].second) P[i].second += n;
		
		if(chk[i] && ans[i] == 1) X[P[i].first].push_back(i);
		else if(!chk[i]) Y[P[i].first].push_back(i);
	}
	
	e = P[x].second; y = -1;
	
	for(i=1; i<=n; i++){
		for(int &t: X[i]) e = max(e, P[t].second);
		for(int &t: Y[i]){
			y = t;
			else if(P[t].second > P[y].second) y = t;
		}
		
		if(i == e){
			if(y == -1) die();
			ans[y] = 1;
			e = P[y].second;
			y = -1;
		}
	}
	
	for(i=1; i<=m; i++) printf("%d", ans[i]);
	printf("\n");
	
	return 0;
}

Compilation message

alternating.cpp: In function 'int main()':
alternating.cpp:92:4: error: 'else' without a previous 'if'
    else if(P[t].second > P[y].second) y = t;
    ^~~~
alternating.cpp:30:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~
alternating.cpp:33:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a, &b);
   ~~~~~^~~~~~~~~~~~~~~~