답안 #1107681

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1107681 2024-11-02T00:30:54 Z laight 열대 식물원 (Tropical Garden) (IOI11_garden) C++17
100 / 100
1674 ms 87156 KB
#include "garden.h"
  #include "gardenlib.h"
  #define pb emplace_back
  #include<bits/stdc++.h>
  using namespace std;
  vector<int>g[300005];
  vector<int>g2[600005];
  int jp=0;
  vector<int>g_rev[600005];
  bool cycle=false;
  int c;
  map<int,bool>vs;
  bool vs1[600005],vs2[600005];
  void dfs(int u,int cnt,int pp)
  {
    if(vs[u]) 
    {
      if(u==pp)
      {
        cycle = true;
        c = cnt;
      }
      return ;
    }
    vs[u]=true;
    assert((int) g2[u].size() <= 1);
    for(auto v:g2[u])
    {
      dfs(v,cnt+1,pp);
    }
  }
  int cnt_ans1[600005];
  int cnt_ans2[600005];
 
  void dfs1(int u,int cnt)
  {
    if(vs1[u]) return ;
    vs1[u] = true;
    cnt_ans1[u] = cnt;
    for(auto v:g_rev[u]) dfs1(v,cnt+1);
  }
  void dfs2(int u,int cnt)
  {
    if(vs2[u]) return ;
    vs2[u] = true;
    cnt_ans2[u] = cnt;
    for(auto v:g_rev[u]) dfs2(v,cnt+1);
  }
 
 
  void count_routes(int n, int m, int p, int R[][2], int Q, int G[])
  {
    for(int i=0;i<m;i++)
    {
      if(g[R[i][0]].size()<=2) g[R[i][0]].pb(R[i][1]);
      if(g[R[i][1]].size()<=2) g[R[i][1]].pb(R[i][0]);
    }
    for(int i=0;i<n;i++)
    {
      int v = g[i][0];
      if(i==g[v][0]) g2[i].pb(v+n);
      else  g2[i].pb(v);
      int vv;
      if(g[i].size()!=1) vv = g[i][1];
      else vv = g[i][0];
 
      if(i==g[vv][0]) g2[i+n].pb(vv+n);
      else  g2[i+n].pb(vv);
    }
    for(int i=0;i<2*n;i++)
    {
      g_rev[g2[i][0]].pb(i);
    }
    dfs(p,0,p);
    bool cycle1 = cycle;
    int c1 = c;
    cycle=false;
    vs.clear();
    dfs(n+p,0,n+p);
    vs.clear();
    bool cycle2 = cycle;
    int c2 = c;
 
    dfs1(p,0);
    dfs2(p+n,0);
 
    
    for(int k=0;k<Q;k++)
    {
      int d = G[k];
      int ans=0;
 
      for(int i=0;i<n;i++)
      {
        bool ok = 0;
        int len = d - cnt_ans1[i];
        if(len >= 0 and vs1[i]) {
        if(cycle1 and len%c1 == 0) ok = 1;
        else if(!cycle1 and len == 0) ok = 1;          
        }
 
        len = d - cnt_ans2[i];
        if(len >= 0 and vs2[i]) {
        if(cycle2 and len%c2 == 0) ok = 1;
        else if(!cycle2 and len == 0) ok = 1;          
        }
 
        ans += ok;
      }
      // cout << endl;
      answer(ans);
    }
    
  }
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 39504 KB Output is correct
2 Correct 8 ms 39504 KB Output is correct
3 Correct 9 ms 39504 KB Output is correct
4 Correct 7 ms 39384 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39696 KB Output is correct
7 Correct 6 ms 39248 KB Output is correct
8 Correct 8 ms 39504 KB Output is correct
9 Correct 8 ms 39504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 39504 KB Output is correct
2 Correct 8 ms 39504 KB Output is correct
3 Correct 9 ms 39504 KB Output is correct
4 Correct 7 ms 39384 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39696 KB Output is correct
7 Correct 6 ms 39248 KB Output is correct
8 Correct 8 ms 39504 KB Output is correct
9 Correct 8 ms 39504 KB Output is correct
10 Correct 9 ms 39248 KB Output is correct
11 Correct 18 ms 44624 KB Output is correct
12 Correct 28 ms 46176 KB Output is correct
13 Correct 137 ms 78920 KB Output is correct
14 Correct 84 ms 60676 KB Output is correct
15 Correct 87 ms 61016 KB Output is correct
16 Correct 69 ms 56748 KB Output is correct
17 Correct 60 ms 53584 KB Output is correct
18 Correct 28 ms 48968 KB Output is correct
19 Correct 81 ms 60716 KB Output is correct
20 Correct 91 ms 62108 KB Output is correct
21 Correct 68 ms 55524 KB Output is correct
22 Correct 63 ms 54600 KB Output is correct
23 Correct 87 ms 62536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 39504 KB Output is correct
2 Correct 8 ms 39504 KB Output is correct
3 Correct 9 ms 39504 KB Output is correct
4 Correct 7 ms 39384 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39696 KB Output is correct
7 Correct 6 ms 39248 KB Output is correct
8 Correct 8 ms 39504 KB Output is correct
9 Correct 8 ms 39504 KB Output is correct
10 Correct 9 ms 39248 KB Output is correct
11 Correct 18 ms 44624 KB Output is correct
12 Correct 28 ms 46176 KB Output is correct
13 Correct 137 ms 78920 KB Output is correct
14 Correct 84 ms 60676 KB Output is correct
15 Correct 87 ms 61016 KB Output is correct
16 Correct 69 ms 56748 KB Output is correct
17 Correct 60 ms 53584 KB Output is correct
18 Correct 28 ms 48968 KB Output is correct
19 Correct 81 ms 60716 KB Output is correct
20 Correct 91 ms 62108 KB Output is correct
21 Correct 68 ms 55524 KB Output is correct
22 Correct 63 ms 54600 KB Output is correct
23 Correct 87 ms 62536 KB Output is correct
24 Correct 7 ms 39248 KB Output is correct
25 Correct 110 ms 44896 KB Output is correct
26 Correct 167 ms 48464 KB Output is correct
27 Correct 793 ms 78160 KB Output is correct
28 Correct 937 ms 60924 KB Output is correct
29 Correct 1052 ms 61168 KB Output is correct
30 Correct 593 ms 55896 KB Output is correct
31 Correct 440 ms 53756 KB Output is correct
32 Correct 190 ms 46920 KB Output is correct
33 Correct 946 ms 61776 KB Output is correct
34 Correct 1018 ms 61156 KB Output is correct
35 Correct 564 ms 55460 KB Output is correct
36 Correct 852 ms 53576 KB Output is correct
37 Correct 789 ms 62536 KB Output is correct
38 Correct 1674 ms 87156 KB Output is correct