제출 #1264000

#제출 시각아이디문제언어결과실행 시간메모리
1264000Noname_1900슈퍼트리 잇기 (IOI20_supertrees)C++20
컴파일 에러
0 ms0 KiB
#include "supertrees.h"
#include<bits/stdc++.h>
using namespace std;
const int NMAX = 1000;
int boss[NMAX];
vector<int> dansComp[NMAX];
vector<int> chemins[3][NMAX];
int findBoss(int noeud)
{
	if(boss[noeud] == noeud)	return noeud;
	return boss[noeud] = findBoss(boss[noeud]);
}
int size[NMAX];
bool merge(int a, int b)
{
	a = findBoss(a);
	b = findBoss(b);
	if(a == b)	return false;
	if(size[b] > size[a])
	{
		swap(a, b);
	}
	size[a] += size[b];
	boss[b] = a;
	for(int i : dansComp[b])	dansComp[a].push_back(i);
	return true;
}
vector<vector<int>> answer;
void creer(int a, int b)
{
	
	answer[a][b] = 1;
	answer[b][a] = 1;
	merge(a, b);
}
bool dansCycle[NMAX];
void parcours(int noeud)
{
	for(int pro : chemins[1][noeud])
	{
		if(findBoss(pro) == findBoss(noeud))	continue;
		creer(noeud, pro);
		parcours(pro);
	}
}
int construct(vector<vector<int>> p) {
	int n = p.size();
	answer.resize(n, vector<int>(n));
	for(int i = 0; i < n; i++)
	{
		size[i] = 1;
		boss[i] = i;
		dansComp[i].push_back(i);
		for(int v = 0; v < n; v++)	answer[i][v] = 0;
	}
	for(int i = 0; i < n; i++)
	{
		for(int c = 0; c < n ; c ++)
		{
			int type = p[i][c];
			chemins[type][i].push_back(c);
		}
	}
	/*
	for(int i = 0; i < n; i++)
	{
		for(int autre = 0; autre < i; autre++)
		{
			if(p[i][autre] == 1)
			{
				creer(findBoss(i), findBoss(autre));
			}
		}
	}
	for(int i = 0; i < n; i++)
	{
		for(int autre = 0; autre < i; autre++)
		{
			if(p[i][autre] == 0)
			{
				if(findBoss(i) == findBoss(autre))	return 0;
			}
		}
	}
		/** */
	for(int i = 0; i < n; i++)
	{
		for(int autre = 0; autre < n; autre++)
		{
			if(p[i][autre] == 2)
			{
				merge(findBoss(i), findBoss(autre));
			}
		}
	}
//	cout << "passe" << endl;
/**
	for(int i = 0; i < n; i++)
	{
		for(int autre = 0; autre < n; autre++)
		{
			//cout << i << " " << autre << endl;
			if(i == autre)	continue;
			if(p[i][autre] == 0)
			{
				if(findBoss(i) == findBoss(autre))	return 0;
			}
		}
	}
	//cout << "passe" << endl;
	/** */
	// cycle de 2
	for(int i = 0; i < n; i++)
	{
		if(findBoss(i) == i)
		{
			if(dansComp[i].size() == 1) continue;
			//if(dansComp[i].size() == 2)	return 0;
		//	cout << endl;
			for(int iDansComp=0; iDansComp < dansComp[i].size(); iDansComp++)
			{
				//cout << dansComp[i][iDansComp] << " ";
				int b;
				if(iDansComp == 0)
				{
					b = dansComp[i][dansComp[i].size()-1];
				}
				else
					b = dansComp[i][iDansComp-1];
				int a = dansComp[i][iDansComp];
				dansCycle[a] = true;
				creer(a, b);
			}
		}
	}
	// parcours pour arbre depuis cycle
	for(int i = 0; i < n; i++)
	{
		if(!dansCycle[i])	continue;
		parcours(i);
	}
	//reste
	for(int i = 0; i < n; i++)	parcours(i);
	for(int i = 0; i < n; i++)
	{
		for(int autre = 0; autre < n; autre++)
		{
			if(((p[i][autre] == 0) && (findBoss(i) == findBoss(autre))) || ((p[i][autre] > 0) && (findBoss(i) != findBoss(autre))))	return 0;
		}
	}
	build(answer);
	return 1;
}

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

supertrees.cpp: In function 'bool merge(int, int)':
supertrees.cpp:19:12: error: reference to 'size' is ambiguous
   19 |         if(size[b] > size[a])
      |            ^~~~
In file included from /usr/include/c++/11/vector:69,
                 from supertrees.h:1,
                 from supertrees.cpp:1:
/usr/include/c++/11/bits/range_access.h:254:5: note: candidates are: 'template<class _Tp, long unsigned int _Nm> constexpr std::size_t std::size(const _Tp (&)[_Nm])'
  254 |     size(const _Tp (&)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/11/bits/range_access.h:245:5: note:                 'template<class _Container> constexpr decltype (__cont.size()) std::size(const _Container&)'
  245 |     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
      |     ^~~~
supertrees.cpp:13:5: note:                 'int size [1000]'
   13 | int size[NMAX];
      |     ^~~~
supertrees.cpp:19:22: error: reference to 'size' is ambiguous
   19 |         if(size[b] > size[a])
      |                      ^~~~
In file included from /usr/include/c++/11/vector:69,
                 from supertrees.h:1,
                 from supertrees.cpp:1:
/usr/include/c++/11/bits/range_access.h:254:5: note: candidates are: 'template<class _Tp, long unsigned int _Nm> constexpr std::size_t std::size(const _Tp (&)[_Nm])'
  254 |     size(const _Tp (&)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/11/bits/range_access.h:245:5: note:                 'template<class _Container> constexpr decltype (__cont.size()) std::size(const _Container&)'
  245 |     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
      |     ^~~~
supertrees.cpp:13:5: note:                 'int size [1000]'
   13 | int size[NMAX];
      |     ^~~~
supertrees.cpp:23:9: error: reference to 'size' is ambiguous
   23 |         size[a] += size[b];
      |         ^~~~
In file included from /usr/include/c++/11/vector:69,
                 from supertrees.h:1,
                 from supertrees.cpp:1:
/usr/include/c++/11/bits/range_access.h:254:5: note: candidates are: 'template<class _Tp, long unsigned int _Nm> constexpr std::size_t std::size(const _Tp (&)[_Nm])'
  254 |     size(const _Tp (&)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/11/bits/range_access.h:245:5: note:                 'template<class _Container> constexpr decltype (__cont.size()) std::size(const _Container&)'
  245 |     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
      |     ^~~~
supertrees.cpp:13:5: note:                 'int size [1000]'
   13 | int size[NMAX];
      |     ^~~~
supertrees.cpp:23:20: error: reference to 'size' is ambiguous
   23 |         size[a] += size[b];
      |                    ^~~~
In file included from /usr/include/c++/11/vector:69,
                 from supertrees.h:1,
                 from supertrees.cpp:1:
/usr/include/c++/11/bits/range_access.h:254:5: note: candidates are: 'template<class _Tp, long unsigned int _Nm> constexpr std::size_t std::size(const _Tp (&)[_Nm])'
  254 |     size(const _Tp (&)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/11/bits/range_access.h:245:5: note:                 'template<class _Container> constexpr decltype (__cont.size()) std::size(const _Container&)'
  245 |     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
      |     ^~~~
supertrees.cpp:13:5: note:                 'int size [1000]'
   13 | int size[NMAX];
      |     ^~~~
supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:51:17: error: reference to 'size' is ambiguous
   51 |                 size[i] = 1;
      |                 ^~~~
In file included from /usr/include/c++/11/vector:69,
                 from supertrees.h:1,
                 from supertrees.cpp:1:
/usr/include/c++/11/bits/range_access.h:254:5: note: candidates are: 'template<class _Tp, long unsigned int _Nm> constexpr std::size_t std::size(const _Tp (&)[_Nm])'
  254 |     size(const _Tp (&)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/11/bits/range_access.h:245:5: note:                 'template<class _Container> constexpr decltype (__cont.size()) std::size(const _Container&)'
  245 |     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
      |     ^~~~
supertrees.cpp:13:5: note:                 'int size [1000]'
   13 | int size[NMAX];
      |     ^~~~