제출 #62676

#제출 시각아이디문제언어결과실행 시간메모리
62676zetapi열대 식물원 (Tropical Garden) (IOI11_garden)C++14
0 / 100
24 ms23948 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 lol,P_,CycleLength[4],Min[MAX],Distance[MAX][4],deg[MAX],res[MAX]; void dfs(int node,int type,int dis) { if(node==P_ ) { //type ke node se bahar nikalne ka CycleLength[type]=dis; return ; } if(type==1) Distance[node][lol]=dis;//jab lol ke node se entry lene ka 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);//jab P mein entry lene ka to kon sa node use kra dfs(A.first,A.second,1); } if(N==2) { answer(1); return ; } 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(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; 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...