답안 #130426

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
130426 2019-07-15T07:49:42 Z 이온조(#3149) Information (CEOI08_information) C++14
100 / 100
224 ms 20476 KB
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;

int N, M, in[2009], ou[2009], t;
vector<pii> adj[2009], R[2009];
bool v1[2009], v2[2009];
int h[1000009];

bool isup(int u, int v) {
	return in[u] <= in[v] && ou[u] >= ou[v];
}

void dfs(int x) {
	in[x] = ++t;
	v1[x] = 1;
	for(auto& it: adj[x]) {
		if(!v1[it.first]) {
			h[it.second] = 1;
			dfs(it.first);
		}
	}
	ou[x] = t;
}

void go(int x) {
	v2[x] = 1;
	for(auto& it: adj[x]) {
		int t, i; tie(t, i) = it;
		if(!v2[t]) {
			if(h[i] == 0) {
				h[i] = 2;
				go(t);
			}
			else if(h[i] == 1 && R[t].size()) {
				int rt, ri; tie(rt, ri) = R[t].back(); R[t].pop_back();
				h[i] = 2; h[ri] = 1;
				go(t);
			}
		}
	}
}

int main() {
	scanf("%d%d",&N,&M);
	for(int i=1; i<=M; i++) {
		int u, v; scanf("%d%d",&u,&v);
		adj[u].push_back({v, i});
	}
	dfs(1);
	for(int i=1; i<=N; i++) {
		for(auto& it: adj[i]) {
			if(!h[it.second] && !isup(it.first, i)) R[it.first].push_back({i, it.second});
		}
	}
	go(1);
	vector<int> A1, A2;
	for(int i=1; i<=N; i++) for(auto& it: adj[i]) {
		if(h[it.second] == 1) A1.push_back(it.second);
		if(h[it.second] == 2) A2.push_back(it.second);
	}
	if((int)A1.size() != N-1 || (int)A2.size() != N-1) puts("NONE");
	else {
		for(auto& it: A1) printf("%d ",it); puts("");
		for(auto& it: A2) printf("%d ",it);
	}
	return 0;
}

Compilation message

information.cpp: In function 'int main()':
information.cpp:64:3: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   for(auto& it: A1) printf("%d ",it); puts("");
   ^~~
information.cpp:64:39: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   for(auto& it: A1) printf("%d ",it); puts("");
                                       ^~~~
information.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&N,&M);
  ~~~~~^~~~~~~~~~~~~~
information.cpp:47:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int u, v; scanf("%d%d",&u,&v);
             ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 3320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 4248 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 2620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 504 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 224 ms 20476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 17144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 217 ms 17768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 632 KB Output is correct
2 Correct 3 ms 504 KB Output is correct