답안 #434554

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
434554 2021-06-21T11:57:57 Z frodakcin 슈퍼트리 잇기 (IOI20_supertrees) C++17
30 / 100
262 ms 23996 KB
#include "supertrees.h"
#include <algorithm>
#include <vector>

struct DSU
{
	public:
		std::vector<int> p, r;
		DSU(int N): p(N, -1), r(N, 0) {}
		int find(int n) {return p[n] == -1 ? n : p[n] = find(p[n]);}
		bool merge(int u, int v)
		{
			u=find(u), v=find(v);
			if(u==v) return v;
			if(r[u] < r[v]) std::swap(u, v);
			p[v]=u, r[u]+=r[u]==r[v], r[v]=-1;
			return 1;
		}
};

int construct(std::vector<std::vector<int>> p)
{
	int N = p.size();
	std::vector<std::vector<int>> answer(N, std::vector<int>(N, 0));

	DSU dsu1(N);
	for (int i = 0; i < N; i++)
		for(int j=i+1;j<N;++j)
			if(p[i][j]==1)
			{
				if(dsu1.merge(i, j))
				{
					if(p[i] != p[j]) // must have identical adj lists
						return 0;
					answer[i][j]=1; // this makes a tree among all 1-con components
					answer[j][i]=1;
				}
			}
	std::vector<int> head;
	for(int i=0;i<N;++i) if(dsu1.p[i]==-1) head.push_back(i);

	for(int sz: {2,3}) // handle 2/3 case
	{
		std::vector<std::vector<int>> group(N, std::vector<int>());
		DSU dsu2(N);
		for(int i=0;i<(int)head.size();++i)
			for(int j=i+1;j<(int)head.size();++j)
				if(p[head[i]][head[j]]==sz)
					dsu2.merge(head[i], head[j]);
		for(int i=0;i<N;++i)
			group[dsu2.find(i)].push_back(i);
		for(int i=0;i<N;++i)
			if(group[i].size() >= 2)
			{
				if(group[i].size() <= 2) return 0;
				if(sz == 3 && group[i].size() <= 4) return 0;
				for(int j=0;j<(int)group[i].size();++j) // create a simple cycle
				{
					int u=group[i][j], v=group[i][(j+1)%group[i].size()];
					answer[u][v]=answer[v][u]=1;
				}
				if(sz == 3)
					answer[group[i][0]][group[i][2]]=answer[group[i][2]][group[i][0]]=1;

				//identicality test
				for(int j=0;j<(int)group[i].size();++j)
					for(int k=j+1;k<(int)group[i].size();++k)
						if(p[group[i][j]][group[i][k]] != sz)
							return 0;
			}
	}

	build(answer);
	return 1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 1100 KB Output is correct
7 Correct 240 ms 22036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 1100 KB Output is correct
7 Correct 240 ms 22036 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 14 ms 1164 KB Output is correct
13 Correct 248 ms 23940 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 5 ms 844 KB Output is correct
17 Correct 110 ms 14060 KB Output is correct
18 Correct 1 ms 224 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Incorrect 59 ms 6236 KB Too many ways to get from 1 to 449, should be 1 found no less than 2
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 10 ms 1228 KB Output is correct
9 Correct 262 ms 23916 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 13 ms 1244 KB Output is correct
13 Correct 251 ms 23964 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 5 ms 768 KB Output is correct
17 Correct 113 ms 14056 KB Output is correct
18 Correct 0 ms 204 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Correct 1 ms 204 KB Output is correct
21 Correct 60 ms 6232 KB Output is correct
22 Correct 243 ms 23996 KB Output is correct
23 Correct 249 ms 23904 KB Output is correct
24 Correct 244 ms 23984 KB Output is correct
25 Correct 108 ms 14048 KB Output is correct
26 Correct 110 ms 14048 KB Output is correct
27 Correct 240 ms 23904 KB Output is correct
28 Correct 253 ms 23988 KB Output is correct
29 Correct 105 ms 14148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Incorrect 1 ms 204 KB Too many ways to get from 1 to 4, should be 1 found no less than 2
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 1100 KB Output is correct
7 Correct 240 ms 22036 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 14 ms 1164 KB Output is correct
13 Correct 248 ms 23940 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 5 ms 844 KB Output is correct
17 Correct 110 ms 14060 KB Output is correct
18 Correct 1 ms 224 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Incorrect 59 ms 6236 KB Too many ways to get from 1 to 449, should be 1 found no less than 2
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 1100 KB Output is correct
7 Correct 240 ms 22036 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 14 ms 1164 KB Output is correct
13 Correct 248 ms 23940 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 5 ms 844 KB Output is correct
17 Correct 110 ms 14060 KB Output is correct
18 Correct 1 ms 224 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Incorrect 59 ms 6236 KB Too many ways to get from 1 to 449, should be 1 found no less than 2
21 Halted 0 ms 0 KB -