답안 #311535

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
311535 2020-10-10T15:00:57 Z Kenzo_1114 Potemkin cycle (CEOI15_indcyc) C++17
20 / 100
25 ms 1792 KB
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1010;

int n, m, depth[MAXN], low[MAXN], par[MAXN];
vector<int> graph[MAXN], l[MAXN];

void dfs(int v, int p)
{
	depth[v] = (v == p) ? 1 : depth[p] + 1;
	par[v] = p;

	for(int i = 0; i < (int) graph[v].size(); i++)
	{
		int u = graph[v][i];
		if(depth[u])
		{
			if(u != p)	
			{
				if(depth[v] > depth[u])	low[v] = max(low[v], depth[u]);
				if(depth[v] - depth[u] >= 3) l[v].push_back(u);
			}
			continue;
		}

		dfs(u, v);
	}
}

int main ()
{
	scanf("%d %d", &n, &m);

	for(int i = 0, u, v; i < m; i++)
	{
		scanf("%d %d", &u, &v);
		graph[u].push_back(v);
		graph[v].push_back(u);
	}

	dfs(1, 1);

//	for(int i = 1; i <= n; i++)
//		printf("i = %d  par = %d  depth = %d low = %d\n", i, par[i], depth[i], low[i]);

	vector<int> ans;
	for(int i = 1; i <= n; i++)
	{
		bool ok = false;
		for(int j = 0; j < l[i].size(); j++)
		{
			if(depth[l[i][j]] != low[i])	continue;

			int cur = i;
			ok = true;
			ans.push_back(cur);
			while(cur != l[i][j])
			{
				cur = par[cur];
				if(cur != l[i][j] && low[cur] >= depth[l[i][j]])	ok = false;
				ans.push_back(cur);
			}

			if(ok)	break;
			else	ans.clear();
		}

		if(ok)	break;
	}

	if(ans.empty())	printf("no\n");
	else	
	{
		for(int i = 0; i < (int) ans.size(); i++)	printf("%d ", ans[i]);
		printf("\n");
	}
}
/*

5 6
1 2
1 3
2 3
4 3
5 2
4 5

4 5
1 2
2 3
3 4
4 1
1 3

*/

Compilation message

indcyc.cpp: In function 'int main()':
indcyc.cpp:50:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for(int j = 0; j < l[i].size(); j++)
      |                  ~~^~~~~~~~~~~~~
indcyc.cpp:32:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   32 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
indcyc.cpp:36:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   36 |   scanf("%d %d", &u, &v);
      |   ~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Expected integer, but "no" found
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 384 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Incorrect 2 ms 384 KB Expected integer, but "no" found
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 1256 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 768 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 1784 KB Output is correct
2 Correct 25 ms 1792 KB Output is correct
3 Incorrect 25 ms 1536 KB Expected integer, but "no" found
4 Halted 0 ms 0 KB -