Submission #282336

#TimeUsernameProblemLanguageResultExecution timeMemory
282336MohamedAhmed04Toy Train (IOI17_train)C++14
5 / 100
2091 ms1540 KiB
#include <bits/stdc++.h>
#include "train.h"
//#include "grader.cpp"

using namespace std ;

const int MAX = 5010 ;

int A[MAX] , R[MAX] ;
vector< vector<int> >adj(MAX) ;
int n ;

int vis[MAX] , mark[MAX] , prv[MAX] ;

bool dfs(int node)
{
	vis[node] = 1 , mark[node] = 1 ;
	for(auto &child : adj[node])
	{
		if(vis[child])
		{
			if(mark[child])
			{
				int a = node ;
				bool flag = 0 ;
				while(a != child)
				{
					flag |= R[a] ;
					a = prv[a] ;
				}
				flag |= R[a] ;
				if(flag == A[node])
				{
					mark[node] = 0 ;
					return 1 ;
				}
			}
			continue ;
		}
		prv[child] = node ;
		bool t = dfs(child) ;
		if(A[node] && A[child] == t)
		{
			mark[node] = 0 ;
			return 1 ;
		}
		else if(!A[node] && A[child] != t)
		{
			mark[node] = 0 ;
			return 1 ;
		}
	}
	mark[node] = 0 ;
	return 0 ;
}

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) 
{
	n = a.size() ;
	int m = u.size() ;
	for(int i = 1 ; i <= n ; ++i)
	{
		A[i] = a[i-1] ;
		R[i] = r[i-1] ;
	}
	for(int i = 0 ; i < m ; ++i)
		adj[u[i] + 1].push_back(v[i] + 1) ;
	vector<int>ans ;
	for(int i = 1 ; i <= n ; ++i)
	{
		memset(vis , 0 , sizeof(vis)) ;
		bool t = dfs(i) ;
		if(A[i] == t)
			ans.push_back(1) ;
		else
			ans.push_back(0) ;
	}
	return ans ;
}
#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...