답안 #598857

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
598857 2022-07-19T06:32:55 Z 장태환(#8458) Potemkin cycle (CEOI15_indcyc) C++17
20 / 100
20 ms 3680 KB
#include <bits/stdc++.h>
#include <assert.h>
using namespace std;
int num[1010];
int depth[1010];
int maxbe[1010];
int par[1010];
vector<int>link[1010];
bool arr[1010][1010];
vector<pair<int, int>>t;
vector<int>ue[1010], de[1010];
int c;
void dfs(int n, int p = 0, int d = 0)
{
	depth[n] = d;
	num[n] = ++c;
	par[n] = p;
	int i;
	for (i = 0; i < link[n].size(); i++)
	{
		if (link[n][i] == p)
			continue;
		if (num[link[n][i]])
		{
			if (depth[link[n][i]] < d)
			{
				if (arr[n][link[n][i]])
					continue;
				arr[n][link[n][i]] = 1;
				maxbe[n] = max(maxbe[n], depth[link[n][i]]);
				t.push_back({ n,link[n][i] });
			}
			else
			{
				if (arr[link[n][i]][n])
					continue;
				arr[link[n][i]][n] = 1;
				maxbe[link[n][i]] = max(maxbe[link[n][i]], d);
				t.push_back({ link[n][i],n });
			}
		}
		else
		{
			dfs(link[n][i], n, d + 1);
		}
	}
}
int main()
{
	memset(maxbe, -10, sizeof(maxbe));
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int N, M;
	cin >> N >> M;
	int i;
	for (i = 0; i < M; i++)
	{
		int a, b;
		cin >> a >> b;
		link[a].push_back(b);
		link[b].push_back(a);
	}
	for (i = 1; i <= N; i++)
	{
		if (!num[i])
		{
			dfs(i);
		}
	}
	for (i = 0; i < t.size(); i++)
	{
		vector<int>ans;
		int c = 0;
		ue[t[i].first].push_back(t[i].second);
		de[t[i].second].push_back(t[i].first);
		while (depth[t[i].first] > depth[t[i].second])
		{
			if (maxbe[t[i].first] > depth[t[i].second] || (maxbe[t[i].first] == depth[t[i].second] && c))
			{
				c = -1;
				break;
			}
			ans.push_back(t[i].first);
			t[i].first = par[t[i].first];
			c++;
		}
		if (c >= 0)
		{
			ans.push_back(t[i].second);
			if (ans.size() <= 3)
			{
				continue;
			}
			for (i = 0; i < ans.size(); i++)
				cout << ans[i] << ' ';
			return 0;
		}
	}
	for (i = 1; i <=N; i++)
	{
		int j;
		for (j = 0; j < ue[i].size(); j++)
		{
			int k;
			for (k = j+1; k < ue[i].size(); k++)
			{
				int a = ue[i][j];
				int b = ue[i][k];
				if (depth[a] < depth[b])
					swap(a, b);
				vector<int>ans;
				while (depth[a] > depth[b])
				{
					if (maxbe[a] > depth[b] || (maxbe[a] == depth[b] && c))
					{
						c = -1;
						break;
					}
					ans.push_back(a);
					a = par[a];
					c++;
				}
				ans.push_back(b);
				ans.push_back(i);
				if (ans.size() <= 3)
					continue;
				for (i = 0; i < ans.size(); i++)
					cout << ans[i] << ' ';
				return 0;
			}
		}
		for (j = 0; j < de[i].size(); j++)
		{
			int k;
			for (k = j + 1; k < de[i].size(); k++)
			{
				int a = de[i][j];
				int b = de[i][k];
				if (depth[a] < depth[b])
					swap(a, b);
				vector<int>ans;
				while (depth[a] > depth[b])
				{
					if (maxbe[a] > depth[b] || (maxbe[a] == depth[b] && c))
					{
						c = -1;
						break;
					}
					ans.push_back(a);
					a = par[a];
					c++;
				}
				ans.push_back(b);
				ans.push_back(i);
				if (ans.size() <= 3)
					continue;
				for (i = 0; i < ans.size(); i++)
					cout << ans[i] << ' ';
				return 0;
			}
		}
	}
	cout << "no";
}

Compilation message

indcyc.cpp: In function 'void dfs(int, int, int)':
indcyc.cpp:19:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |  for (i = 0; i < link[n].size(); i++)
      |              ~~^~~~~~~~~~~~~~~~
indcyc.cpp: In function 'int main()':
indcyc.cpp:70:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |  for (i = 0; i < t.size(); i++)
      |              ~~^~~~~~~~~~
indcyc.cpp:94:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |    for (i = 0; i < ans.size(); i++)
      |                ~~^~~~~~~~~~~~
indcyc.cpp:102:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |   for (j = 0; j < ue[i].size(); j++)
      |               ~~^~~~~~~~~~~~~~
indcyc.cpp:105:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |    for (k = j+1; k < ue[i].size(); k++)
      |                  ~~^~~~~~~~~~~~~~
indcyc.cpp:127:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  127 |     for (i = 0; i < ans.size(); i++)
      |                 ~~^~~~~~~~~~~~
indcyc.cpp:132:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  132 |   for (j = 0; j < de[i].size(); j++)
      |               ~~^~~~~~~~~~~~~~
indcyc.cpp:135:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  135 |    for (k = j + 1; k < de[i].size(); k++)
      |                    ~~^~~~~~~~~~~~~~
indcyc.cpp:157:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  157 |     for (i = 0; i < ans.size(); i++)
      |                 ~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 356 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 468 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 852 KB Wrong answer on graph without induced cycle
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 724 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 2896 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 2004 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 2980 KB Output is correct
2 Incorrect 20 ms 3680 KB Wrong answer on graph without induced cycle
3 Halted 0 ms 0 KB -