Submission #1078009

# Submission time Handle Problem Language Result Execution time Memory
1078009 2024-08-27T11:34:04 Z Elias Toy Train (IOI17_train) C++17
0 / 100
358 ms 1616 KB
#ifndef _DEBUG
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#endif

#include <bits/stdc++.h>

using namespace std;

#ifdef _DEBUG
std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v);
#else
#include "train.h"
#endif

vector<vector<int>> adj;

vector<int> visited;
vector<int> reachable_chargers;

vector<int> chargers;

vector<int> loop;

void dfs_find_chargers(int i)
{
	if (visited[i])
		return;
	visited[i] = true;
	if (chargers[i])
		reachable_chargers.push_back(i);

	for (int c : adj[i])
	{
		if (visited[c])
			continue;
		dfs_find_chargers(c);
	}
}

bool dfs_find_loop(int i, int start)
{
	if (visited[i])
		return 0;
	if (chargers[i])
		return 0;
	visited[i] = true;
	bool any = false;
	for (int c : adj[i])
	{
		if (c == start)
			return true;
		if (visited[c])
			continue;
		any |= dfs_find_loop(c, start);
		if (any)
			break;
	}
	return any;
}

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v)
{
	int n = a.size();
	chargers = r;
	adj.resize(n);
	for (int i = 0; i < u.size(); i++)
	{
		adj[u[i]].push_back(v[i]);
	}

	vector<int> output;

	vector<int> loopable(n);

	for (int i = 0; i < n; i++)
	{
		if (loopable[i])
			continue;

		visited = vector<int>(n);
		loop.clear();

		loopable[i] = dfs_find_loop(i, i);
	}

	for (int q = 0; q < n; q++)
	{

		bool any = loopable[q];

		output.push_back(any);
	}
	return output;
}

#ifdef _DEBUG

using namespace std;

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

	vector<int> a(n), r(n), u(m), v(m);

	for (int i = 0; i < n; i++)
		assert(1 == scanf("%d", &a[i]));

	for (int i = 0; i < n; i++)
		assert(1 == scanf("%d", &r[i]));

	for (int i = 0; i < m; i++)
		assert(2 == scanf("%d %d", &u[i], &v[i]));

	vector<int> res = who_wins(a, r, u, v);

	for (int i = 0; i < (int)res.size(); i++)
		printf(i ? " %d" : "%d", res[i]);
	printf("\n");

	return 0;
}

#endif

Compilation message

train.cpp: In function 'std::vector<int> who_wins(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
train.cpp:67:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |  for (int i = 0; i < u.size(); i++)
      |                  ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 860 KB 3rd lines differ - on the 6th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB 3rd lines differ - on the 2nd token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 72 ms 1616 KB 3rd lines differ - on the 5th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 8 ms 1220 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 358 ms 1380 KB 3rd lines differ - on the 2nd token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 860 KB 3rd lines differ - on the 6th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -