이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "islands.h"
using namespace std;
#define mp make_pair
#define fr first
#define sc second
long long n,m,dh[100069],an[100069],cyc[100069];
vector<long long> al[100069],vl[100069];
bitset<100069> vtd,vtd2;
void dfs(long long x)
{
long long i,j,sz=al[x].size(),sz2,k,l;
vtd[x]=1;
vtd2[x]=1;
for(i=0;i<sz;i++)
{
l=al[x][i];
if(!vtd[l])
{
dh[l]=dh[x]+1;
dfs(l);
}
if(vtd2[l])
{
if(dh[l]>dh[an[x]])
{
an[x]=l;
}
}
else
{
if(dh[an[l]]>dh[an[x]])
{
an[x]=an[l];
}
cyc[x]=min(cyc[x]+cyc[l],2ll);
}
if(!vl[x].empty())
{
if(!cyc[l])
{
cyc[x]=min(cyc[x]+1,2ll);
}
sz2=vl[x].size();
for(j=0;j<sz2;j++)
{
k=vl[x][j];
cyc[k]=max(cyc[k],1ll);
}
vl[x].clear();
}
}
vtd2[x]=0;
if(vtd2[an[x]])
{
vl[an[x]].push_back(x);
}
}
variant<bool,vector<int>> find_journey(int on,int om,vector<int> ka,vector<int> la)
{
long long i,k,l;
n=on;
m=om;
for(i=1;i<=m;i++)
{
k=ka[i-1]+1;
l=la[i-1]+1;
al[k].push_back(l);
}
dh[0]=-1;
dfs(1);
return cyc[1]==2;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |