Submission #619287

# Submission time Handle Problem Language Result Execution time Memory
619287 2022-08-02T10:57:21 Z MohamedAhmed04 Toy Train (IOI17_train) C++14
11 / 100
12 ms 2260 KB
#include "train.h"
#include <bits/stdc++.h>

using namespace std ;

const int MAX = 5000 + 10 ;

int arr[MAX] , mark[MAX] , charging[MAX] ;
int n , m ;

vector< vector<int> >adj(MAX) , adjr(MAX) ;
vector< vector<int> >adj2(MAX) , adj2r(MAX) ;

int vis[MAX] , ans[MAX] ;
int deg[MAX] , deg2[MAX] ;

void Construct_Graph()
{
	queue<int>q ;
	for(int i = 1 ; i <= n ; ++i)
	{
		mark[i] = 0 , deg[i] = deg2[i] ;
		if(charging[i] && ans[i])
			q.push(i) , mark[i] = 1 ;
	}
	while(!q.empty())
	{
		int node = q.front() ;
		q.pop() ;
		for(auto &child : adjr[node])
		{
			deg[child]-- ;
			if(mark[child])
				continue ;
			if((arr[child]) || (!deg[child]))
			{
				mark[child] = 1 ;
				q.push(child) ;
			}
		}
	}
	for(int i = 1 ; i <= n ; ++i)
	{
		adj2[i].clear() , adj2r[i].clear() ;
		if(mark[i])
			continue ;
		for(auto &child : adj[i])
		{
			if(!mark[child])
			{
				adj2[i].push_back(child) ;
			}
		}
	}
}

// don't forget self-loop

vector<int>v , topo ;

void dfs(int node)
{
	vis[node] = 1 ;
	for(auto &child : adj2r[node])
	{
		if(!vis[child])
			dfs(child) ;
	}
	topo.push_back(node) ;
}

void dfs2(int node)
{
	vis[node] = 1 ;
	v.push_back(node) ;
	for(auto &child : adj2[node])
	{
		if(!vis[child])
			dfs2(child) ;
	}
}

void Find_Cycles()
{
	topo.clear() ;
	for(int i = 1 ; i <= n ; ++i)
	{
		for(auto &child : adj2[i])
			adj2r[child].push_back(i) ;
	}
	memset(vis , 0 , sizeof(vis)) ;
	for(int i = 1 ; i <= n ; ++i)
	{
		if(!vis[i])
			dfs(i) ;
	}
	reverse(topo.begin() , topo.end()) ;
	memset(vis , 0 , sizeof(vis)) ;
	for(auto &i : topo)
	{
		if(vis[i])
			continue ;
		v.clear() ;
		dfs2(i) ;
		if(v.size() == 1)
		{
			for(auto &child : adj2[i])
			{
				if(child == i) //self loop
					ans[i] = 0 ;
			}
			continue ;
		}
		for(auto &node : v)
			ans[node] = 0 ;
	}
}

void solve()
{
	queue<int>q ;
	for(int i = 1 ; i <= n ; ++i)
	{
		deg[i] = deg2[i] ;
		if(!ans[i])
			q.push(i) ;
	}
	while(!q.empty())
	{
		int node = q.front() ;
		q.pop() ;
		for(auto &child : adjr[node])
		{
			deg[child]-- ;
			if(!ans[child])
				continue ;
			if((!arr[child]) || (!deg[child]))
			{
				ans[child] = 0 ;
				q.push(child) ;
			}
		}
	}
}

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) 
{
	n = a.size() , m = u.size() ;
	for(int i = 1 ; i <= n ; ++i)
		ans[i] = 1 , arr[i] = a[i-1] , charging[i] = r[i-1] ;
	for(int i = 0 ; i < m ; ++i)
		deg[u[i]+1]++ , adj[u[i]+1].push_back(v[i]+1) , adjr[v[i]+1].push_back(u[i]+1) ;
	for(int i = 1 ; i <= n ; ++i)
		deg2[i] = deg[i] ;
	for(int _ = 0 ; _ < 1 ; ++_)
	{
		Construct_Graph() ;
		Find_Cycles() ;
		solve() ;
	}
	vector<int>ans2 ;
	for(int i = 1 ; i <= n ; ++i)
		ans2.push_back(ans[i]) ;
	return ans2 ;
}
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 1620 KB 3rd lines differ - on the 1st token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 724 KB Output is correct
2 Correct 1 ms 784 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Incorrect 1 ms 724 KB 3rd lines differ - on the 4th token, expected: '0', found: '1'
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 7 ms 2004 KB 3rd lines differ - on the 1st token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 7 ms 1748 KB Output is correct
2 Correct 8 ms 1876 KB Output is correct
3 Correct 9 ms 2260 KB Output is correct
4 Correct 9 ms 2080 KB Output is correct
5 Correct 10 ms 2260 KB Output is correct
6 Correct 8 ms 1984 KB Output is correct
7 Correct 11 ms 2080 KB Output is correct
8 Correct 10 ms 2204 KB Output is correct
9 Correct 12 ms 1912 KB Output is correct
10 Correct 10 ms 1952 KB Output is correct
11 Correct 8 ms 2004 KB Output is correct
12 Correct 9 ms 1956 KB Output is correct
13 Correct 10 ms 2132 KB Output is correct
14 Correct 9 ms 2004 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 2132 KB Output is correct
2 Correct 8 ms 1948 KB Output is correct
3 Correct 9 ms 1948 KB Output is correct
4 Correct 9 ms 1876 KB Output is correct
5 Correct 1 ms 852 KB Output is correct
6 Correct 7 ms 1748 KB Output is correct
7 Correct 5 ms 1436 KB Output is correct
8 Incorrect 6 ms 1564 KB 3rd lines differ - on the 5th token, expected: '0', found: '1'
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 5 ms 1620 KB 3rd lines differ - on the 1st token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -