제출 #406816

#제출 시각아이디문제언어결과실행 시간메모리
406816daniel920712장난감 기차 (IOI17_train)C++14
0 / 100
1029 ms25488 KiB
#include "train.h"
using namespace std;
vector < int > Next[5005],Next2[5005],ans,P,W;
bool have1[5005][5005];
bool can[5005];
bool have2[5005];
bool F(int st,int here,int deg)
{
    int t=1-W[here];
    if(here==st&&deg) return 1;
    if(have1[st][here]) return can[here];
    have1[st][here]=1;
    for(auto i:Next[here])
    {
        t=F(st,i,deg+1);
        if(W[here]==t) t=1-t;
    }
    can[here]=t;
    return t;

}
void F2(int here)
{
    if(have2[here]) return;
    have2[here]=1;
    for(auto i:Next2[here]) F2(i);
}
vector < int > who_wins(vector < int > who, vector < int > power, vector < int > u, vector < int > v)
{
    P=power;
    W=who;
    int N=who.size(),M=u.size(),i;
	for(i=0;i<N;i++) ans.push_back(0);
	for(i=0;i<M;i++) Next[u[i]].push_back(v[i]);
	for(i=0;i<M;i++) Next2[v[i]].push_back(u[i]);
    for(i=0;i<N;i++) if(power[i]) F(i,i,0);
    for(i=0;i<N;i++) if(can[i]) F2(i);

    for(i=0;i<N;i++) ans[i]=have2[i];
	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...