제출 #57960

#제출 시각아이디문제언어결과실행 시간메모리
57960fredbrICC (CEOI16_icc)C++17
18 / 100
588 ms832 KiB
#include <bits/stdc++.h>
#include "icc.h"

using namespace std;

const int maxn = 110;

int roads = 0;

struct Dsu
{
	int pai[maxn], w[maxn];

	int find(int x)
	{
		if (pai[x] == x) return x;
		return pai[x] = find(pai[x]);
	}

	void join(int x, int y)
	{
		x = find(x), y = find(y);
		if (w[x] < w[y]) swap(x, y);
		pai[y] = x;
		w[x] += y;
	}

	void reset(int x)
	{
		for(int i = 1; i <= x; i++)
			pai[i] = i, w[i] = 1;
	}
};

Dsu dsu;

bool find(int n, int x)
{
	vector<int> v;
	vector<int> vx = {x};
	for (int i = x+1; i <= n; i++)
		if (dsu.find(i) != dsu.find(x))
			v.push_back(i);

	if (v.size() == 0) return false;	
	return query(1, v.size(), vx.data(), v.data());
}

int qrs = 0;

void solve(int n, int x)
{
	for (int i = x+1; i <= n; i++) {

		if (dsu.find(i) == dsu.find(x))
			continue;

		vector<int> vx = {x};
		vector<int> v = {i};

		qrs++;

		if (query(1, 1, vx.data(), v.data())) {

			// if (roads == n-2)
				// cout << qrs << "\n";
			setRoad(x, i);
			roads++;
			dsu.join(x, i);
			break;
		}
	}
}

void run(int n)
{	
	dsu.reset(n);
	while (roads < n-1) {

		int root;
		for (int i = 1; i < n; i++) {
			if (find(n, i)) {
				root = i;
				break;
			}
		}
		solve(n, root);
	}
}

컴파일 시 표준 에러 (stderr) 메시지

icc.cpp: In function 'void run(int)':
icc.cpp:87:8: warning: 'root' may be used uninitialized in this function [-Wmaybe-uninitialized]
   solve(n, root);
   ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...