답안 #113555

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
113555 2019-05-26T09:05:54 Z E869120 Simurgh (IOI17_simurgh) C++14
51 / 100
164 ms 3320 KB
#include "simurgh.h"
#include <bits/stdc++.h>
using namespace std;

class UnionFind {
public:
	vector<int>par;
	void init(int sz) { par.resize(sz, -1); }
	int root(int pos) {
		if (par[pos] == -1) return pos;
		par[pos] = root(par[pos]);
		return par[pos];
	}
	void unite(int u, int v) { u = root(u); v = root(v); par[u] = v; }
};

int N, M, A[1 << 18], B[1 << 18], id[509][509], col[509], ming[509], represent[509], cnts; bool forced[509];
vector<int>G[509], ans; int rr[509][509];
vector<pair<int, int>> R[509];

void dfs(int root, int pos) {
	if (col[pos] >= 1) return;
	col[pos] = cnts;
	if (id[root][pos] >= 0) {
		represent[cnts] = pos;
		if (root > pos && rr[root][pos] == 1) ming[cnts] = pos;
	}
	for (int t : G[pos]) dfs(root, t);
}

void solve(int pos) {
	UnionFind UF; UF.init(N); vector<int>v;
	for (int i = 0; i < N; i++) { G[i].clear(); R[i].clear(); col[i] = 0; ming[i] = -1; represent[i] = 0; cnts = 0; forced[i] = false; }
	for (int i = 0; i < M; i++) {
		if (A[i] == pos || B[i] == pos) continue;
		if (UF.root(A[i]) == UF.root(B[i])) continue;
		UF.unite(A[i], B[i]); v.push_back(i);
		G[A[i]].push_back(B[i]);
		G[B[i]].push_back(A[i]);
	}
	for (int i = 0; i < N; i++) {
		if (i == pos || col[i] >= 1) continue;
		cnts++; dfs(pos, i);
	}
	for (int i = 1; i <= cnts; i++) { if (ming[i] >= 0) forced[ming[i]] = true; }
	for (int i = 0; i < N; i++) {
		if (id[pos][i] == -1) continue;
		if (pos > i && forced[i] == false) continue;
		
		vector<int>vec = v;
		for (int j = 1; j <= cnts; j++) { if (j == col[i]) continue; vec.push_back(id[pos][represent[j]]); }
		vec.push_back(id[pos][i]);
		int E = count_common_roads(vec);
		R[col[i]].push_back(make_pair(E, i));
	}
	for (int i = 1; i <= cnts; i++) {
		sort(R[i].begin(), R[i].end());
		reverse(R[i].begin(), R[i].end());
		for (int j = 0; j < R[i].size(); j++) { if (R[i][j].first == R[i][0].first) { ans.push_back(id[pos][R[i][j].second]); rr[pos][R[i][j].second] = 1; rr[R[i][j].second][pos] = 1; } }
	}
}

vector<int> find_roads(int n, vector<int> u, vector<int> v) {
	N = n; M = u.size();
	for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) id[i][j] = -1; }
	for (int i = 0; i < M; i++) { id[u[i]][v[i]] = i; id[v[i]][u[i]] = i; A[i] = u[i]; B[i] = v[i]; }
	for (int i = 0; i < N; i++) solve(i);
	sort(ans.begin(), ans.end());
	ans.erase(unique(ans.begin(), ans.end()), ans.end());
	//cout << "#answer = "; for (int i = 0; i < ans.size(); i++) cout << ans[i] << ", "; cout << endl;
	return ans;
}

Compilation message

simurgh.cpp: In function 'void solve(int)':
simurgh.cpp:59:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < R[i].size(); j++) { if (R[i][j].first == R[i][0].first) { ans.push_back(id[pos][R[i][j].second]); rr[pos][R[i][j].second] = 1; rr[R[i][j].second][pos] = 1; } }
                   ~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB correct
2 Correct 2 ms 384 KB correct
3 Correct 2 ms 384 KB correct
4 Correct 3 ms 384 KB correct
5 Correct 2 ms 384 KB correct
6 Correct 2 ms 384 KB correct
7 Correct 2 ms 384 KB correct
8 Correct 2 ms 384 KB correct
9 Correct 2 ms 384 KB correct
10 Correct 2 ms 384 KB correct
11 Correct 2 ms 384 KB correct
12 Correct 2 ms 384 KB correct
13 Correct 2 ms 384 KB correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB correct
2 Correct 2 ms 384 KB correct
3 Correct 2 ms 384 KB correct
4 Correct 3 ms 384 KB correct
5 Correct 2 ms 384 KB correct
6 Correct 2 ms 384 KB correct
7 Correct 2 ms 384 KB correct
8 Correct 2 ms 384 KB correct
9 Correct 2 ms 384 KB correct
10 Correct 2 ms 384 KB correct
11 Correct 2 ms 384 KB correct
12 Correct 2 ms 384 KB correct
13 Correct 2 ms 384 KB correct
14 Correct 3 ms 640 KB correct
15 Correct 4 ms 640 KB correct
16 Correct 3 ms 640 KB correct
17 Correct 3 ms 640 KB correct
18 Correct 2 ms 512 KB correct
19 Correct 3 ms 512 KB correct
20 Correct 4 ms 640 KB correct
21 Correct 3 ms 640 KB correct
22 Correct 3 ms 640 KB correct
23 Correct 3 ms 640 KB correct
24 Correct 3 ms 640 KB correct
25 Correct 2 ms 640 KB correct
26 Correct 3 ms 640 KB correct
27 Correct 3 ms 512 KB correct
28 Correct 3 ms 640 KB correct
29 Correct 2 ms 512 KB correct
30 Correct 3 ms 640 KB correct
31 Correct 3 ms 640 KB correct
32 Correct 3 ms 512 KB correct
33 Correct 3 ms 640 KB correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB correct
2 Correct 2 ms 384 KB correct
3 Correct 2 ms 384 KB correct
4 Correct 3 ms 384 KB correct
5 Correct 2 ms 384 KB correct
6 Correct 2 ms 384 KB correct
7 Correct 2 ms 384 KB correct
8 Correct 2 ms 384 KB correct
9 Correct 2 ms 384 KB correct
10 Correct 2 ms 384 KB correct
11 Correct 2 ms 384 KB correct
12 Correct 2 ms 384 KB correct
13 Correct 2 ms 384 KB correct
14 Correct 3 ms 640 KB correct
15 Correct 4 ms 640 KB correct
16 Correct 3 ms 640 KB correct
17 Correct 3 ms 640 KB correct
18 Correct 2 ms 512 KB correct
19 Correct 3 ms 512 KB correct
20 Correct 4 ms 640 KB correct
21 Correct 3 ms 640 KB correct
22 Correct 3 ms 640 KB correct
23 Correct 3 ms 640 KB correct
24 Correct 3 ms 640 KB correct
25 Correct 2 ms 640 KB correct
26 Correct 3 ms 640 KB correct
27 Correct 3 ms 512 KB correct
28 Correct 3 ms 640 KB correct
29 Correct 2 ms 512 KB correct
30 Correct 3 ms 640 KB correct
31 Correct 3 ms 640 KB correct
32 Correct 3 ms 512 KB correct
33 Correct 3 ms 640 KB correct
34 Correct 156 ms 2176 KB correct
35 Correct 160 ms 2300 KB correct
36 Correct 111 ms 1980 KB correct
37 Correct 16 ms 1408 KB correct
38 Correct 164 ms 2168 KB correct
39 Correct 142 ms 2168 KB correct
40 Correct 114 ms 1912 KB correct
41 Correct 147 ms 2168 KB correct
42 Correct 158 ms 2296 KB correct
43 Correct 88 ms 1860 KB correct
44 Correct 81 ms 1744 KB correct
45 Correct 83 ms 1784 KB correct
46 Correct 68 ms 1656 KB correct
47 Correct 33 ms 1528 KB correct
48 Correct 7 ms 1280 KB correct
49 Correct 16 ms 1408 KB correct
50 Correct 34 ms 1528 KB correct
51 Correct 86 ms 1812 KB correct
52 Correct 71 ms 1656 KB correct
53 Correct 68 ms 1660 KB correct
54 Correct 100 ms 1784 KB correct
55 Correct 73 ms 1916 KB correct
56 Correct 74 ms 1784 KB correct
57 Correct 77 ms 1792 KB correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB correct
2 Correct 2 ms 384 KB correct
3 Incorrect 98 ms 3320 KB WA in grader: NO
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB correct
2 Correct 2 ms 384 KB correct
3 Correct 2 ms 384 KB correct
4 Correct 3 ms 384 KB correct
5 Correct 2 ms 384 KB correct
6 Correct 2 ms 384 KB correct
7 Correct 2 ms 384 KB correct
8 Correct 2 ms 384 KB correct
9 Correct 2 ms 384 KB correct
10 Correct 2 ms 384 KB correct
11 Correct 2 ms 384 KB correct
12 Correct 2 ms 384 KB correct
13 Correct 2 ms 384 KB correct
14 Correct 3 ms 640 KB correct
15 Correct 4 ms 640 KB correct
16 Correct 3 ms 640 KB correct
17 Correct 3 ms 640 KB correct
18 Correct 2 ms 512 KB correct
19 Correct 3 ms 512 KB correct
20 Correct 4 ms 640 KB correct
21 Correct 3 ms 640 KB correct
22 Correct 3 ms 640 KB correct
23 Correct 3 ms 640 KB correct
24 Correct 3 ms 640 KB correct
25 Correct 2 ms 640 KB correct
26 Correct 3 ms 640 KB correct
27 Correct 3 ms 512 KB correct
28 Correct 3 ms 640 KB correct
29 Correct 2 ms 512 KB correct
30 Correct 3 ms 640 KB correct
31 Correct 3 ms 640 KB correct
32 Correct 3 ms 512 KB correct
33 Correct 3 ms 640 KB correct
34 Correct 156 ms 2176 KB correct
35 Correct 160 ms 2300 KB correct
36 Correct 111 ms 1980 KB correct
37 Correct 16 ms 1408 KB correct
38 Correct 164 ms 2168 KB correct
39 Correct 142 ms 2168 KB correct
40 Correct 114 ms 1912 KB correct
41 Correct 147 ms 2168 KB correct
42 Correct 158 ms 2296 KB correct
43 Correct 88 ms 1860 KB correct
44 Correct 81 ms 1744 KB correct
45 Correct 83 ms 1784 KB correct
46 Correct 68 ms 1656 KB correct
47 Correct 33 ms 1528 KB correct
48 Correct 7 ms 1280 KB correct
49 Correct 16 ms 1408 KB correct
50 Correct 34 ms 1528 KB correct
51 Correct 86 ms 1812 KB correct
52 Correct 71 ms 1656 KB correct
53 Correct 68 ms 1660 KB correct
54 Correct 100 ms 1784 KB correct
55 Correct 73 ms 1916 KB correct
56 Correct 74 ms 1784 KB correct
57 Correct 77 ms 1792 KB correct
58 Correct 2 ms 384 KB correct
59 Correct 2 ms 384 KB correct
60 Incorrect 98 ms 3320 KB WA in grader: NO
61 Halted 0 ms 0 KB -