답안 #409738

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
409738 2021-05-21T12:44:30 Z Jasiekstrz 장난감 기차 (IOI17_train) C++17
0 / 100
886 ms 1688 KB
#include<bits/stdc++.h>
#include "train.h"
using namespace std;
const int N=5e3;
bool ab[N+10];
bool charge[N+10];
vector<int> e[N+10];
bool vis[N+10][2];
bool dp[N+10][2];
bool win[N+10];
int g[N+10];
vector<int> st;
void dfs(int x,bool t)
{
	vis[x][t]=true;
	g[x]=st.size();
	st.push_back(x);
	if(charge[x] && !t)
	{
		if(!vis[x][1])
			dfs(x,1);
		dp[x][0]=dp[x][1];
		return;
	}
	dp[x][t]=!ab[x];
	for(auto v:e[x])
	{
		if(g[v]==1)
		{
			if(ab[x]==t)
			{
				dp[x][t]=ab[x];
				break;
			}
			else
				continue;
		}
		else if(g[v]!=0)
		{
			if(!ab[x])
			{
				dp[x][t]=false;
				break;
			}
			else
				continue;
		}
		if(!vis[v][t])
			dfs(v,t);
		if(dp[v][t]==ab[x])
		{
			dp[x][t]=ab[x];
			break;
		}
	}
	g[x]=0;
	st.pop_back();
	return;
}
void dfsw(int x,int fch)
{
	vis[x][0]=true;
	g[x]=st.size();
	st.push_back(x);
	if(charge[x])
		fch=g[x];
	bool sm=false;
	for(auto v:e[x])
	{
		if(g[v]!=0)
		{
			if(g[v]>fch && !ab[x])
				sm=true;
		}
		else
		{
			if(!vis[v][0])
				dfsw(v,fch);
			if(win[v]==ab[x])
				sm=true;
		}
	}
	if(!win[x])
		win[x]=(sm ? ab[x]:!ab[x]);
	g[x]=0;
	st.pop_back();
	return;
}
vector<int> who_wins(vector<int> a,vector<int> r,vector<int> u,vector<int> v)
{
	int n=a.size(),m=u.size();
	for(int i=0;i<n;i++)
	{
		ab[i]=a[i];
		charge[i]=r[i];
	}
	for(int i=0;i<m;i++)
		e[u[i]].push_back(v[i]);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			vis[j][0]=vis[i][1]=false;
		dfs(i,0);
		win[i]=dp[i][0];
	}
	for(int i=0;i<n;i++)
		vis[i][0]=vis[i][1]=false;
	for(int i=0;i<n;i++)
	{
		if(!vis[i][0])
			dfsw(i,0);
	}
	vector<int> ans(n);
	for(int i=0;i<n;i++)
		ans[i]=win[i];
	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 1228 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB 3rd lines differ - on the 2nd token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 164 ms 1444 KB Output is correct
2 Correct 70 ms 1628 KB Output is correct
3 Correct 24 ms 1520 KB Output is correct
4 Incorrect 886 ms 1688 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 1100 KB 3rd lines differ - on the 60th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 595 ms 1248 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 1228 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -