Submission #62766

#TimeUsernameProblemLanguageResultExecution timeMemory
62766zetapiTropical Garden (IOI11_garden)C++14
0 / 100
53 ms48364 KiB
#include "garden.h" #include "gardenlib.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define ll long long #define itr ::iterator typedef pair<int,int> pii; const int MAX=1e6; vector<pii> vec[MAX]; int CycleLength[4],Distance[MAX][4]; int lol,P_,Min[MAX],deg[MAX],res[MAX]; void dfs(int node,int type,int dis) { if(node==P_ ) { CycleLength[0]=dis; return ; } if(type==1) Distance[node][0]=dis; if(type==2) { for(auto A:vec[node]) { if(Min[node]==A.first) dfs(A.first,A.second,dis+1); } return ; } for(auto A:vec[node]) { if(Min[node]==A.first and deg[node]==2) continue; dfs(A.first,A.second,dis+1); } return ; } void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) { P_=P; int u,v; for(int A=0;A<N;A++) { Min[A]=-1; Distance[A][0]=-1; Distance[A][1]=-1; } for(int A=0;A<M;A++) { u=R[A][0]; v=R[A][1]; if(deg[u]<2) { ++deg[u]; vec[v].pb(mp(u,deg[u])); } if(deg[v]<2) { ++deg[v]; vec[u].pb(mp(v,deg[v])); } if(Min[u]==-1) Min[u]=v; if(Min[v]==-1) Min[v]=u; } Distance[P][0]=0; Distance[P][1]=0; for(auto A:vec[P]) { lol=(Min[P]==A.first); dfs(A.first,A.second,1); } int ok; for(int B=0;B<Q;B++) { for(int A=0;A<N;A++) { ok=0; ok|=Distance[A][0]==G[B];//entering without min ok|=Distance[A][1]==G[B];//entering with min //if(CycleLength[1]) // if(Distance[A][0]>=0 and CycleLength[1]>0 and G[B]-Distance[A][0]>=0 and ((CycleLength[1]!=0 and (G[B]-Distance[A][0])%CycleLength[1]==0) or(CycleLength[2]!=0 and (G[B]-Distance[A][0])%CycleLength[2]==0))) /// ok|=1; //if(Distance[A][1]>=0 and CycleLength[2]>0 and G[B]-Distance[A][1]>=0 and ((CycleLength[2]!=0 and (G[B]-Distance[A][1])%CycleLength[2]==0) or (CycleLength[1]!=0 and (G[B]-Distance[A][1])%CycleLength[1]==0))) // ok|=1; for(int C=0;C<2;C++) for(int D=0;D<2;D++) { if(!(Distance[A][C]>=0 and CycleLength[D]>=0)) continue; if((G[B]-Distance[A][C])%CycleLength[D]==0) ok|=1; } res[B]+=ok; } } for(int A=0;A<Q;A++) answer(res[A]); return ; } /*signed main() { ios_base::sync_with_stdio(false); int G[]={3,1}; int R[][2]={{1,0},{1,2},{3,2},{1,3},{4,2}}; count_routes(5,5,2,R,2,G); return 0; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...