답안 #1104861

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1104861 2024-10-24T14:38:16 Z sweed 열대 식물원 (Tropical Garden) (IOI11_garden) C++14
100 / 100
1620 ms 85952 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;
    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 10 ms 39504 KB Output is correct
3 Correct 8 ms 39504 KB Output is correct
4 Correct 8 ms 39416 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39504 KB Output is correct
7 Correct 8 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 10 ms 39504 KB Output is correct
3 Correct 8 ms 39504 KB Output is correct
4 Correct 8 ms 39416 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39504 KB Output is correct
7 Correct 8 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 7 ms 39248 KB Output is correct
11 Correct 19 ms 44624 KB Output is correct
12 Correct 25 ms 46160 KB Output is correct
13 Correct 123 ms 78204 KB Output is correct
14 Correct 82 ms 60752 KB Output is correct
15 Correct 84 ms 61000 KB Output is correct
16 Correct 69 ms 55876 KB Output is correct
17 Correct 60 ms 53576 KB Output is correct
18 Correct 28 ms 48464 KB Output is correct
19 Correct 77 ms 60676 KB Output is correct
20 Correct 100 ms 61000 KB Output is correct
21 Correct 72 ms 55444 KB Output is correct
22 Correct 59 ms 53576 KB Output is correct
23 Correct 101 ms 62536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 39504 KB Output is correct
2 Correct 10 ms 39504 KB Output is correct
3 Correct 8 ms 39504 KB Output is correct
4 Correct 8 ms 39416 KB Output is correct
5 Correct 7 ms 39248 KB Output is correct
6 Correct 8 ms 39504 KB Output is correct
7 Correct 8 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 7 ms 39248 KB Output is correct
11 Correct 19 ms 44624 KB Output is correct
12 Correct 25 ms 46160 KB Output is correct
13 Correct 123 ms 78204 KB Output is correct
14 Correct 82 ms 60752 KB Output is correct
15 Correct 84 ms 61000 KB Output is correct
16 Correct 69 ms 55876 KB Output is correct
17 Correct 60 ms 53576 KB Output is correct
18 Correct 28 ms 48464 KB Output is correct
19 Correct 77 ms 60676 KB Output is correct
20 Correct 100 ms 61000 KB Output is correct
21 Correct 72 ms 55444 KB Output is correct
22 Correct 59 ms 53576 KB Output is correct
23 Correct 101 ms 62536 KB Output is correct
24 Correct 7 ms 39248 KB Output is correct
25 Correct 106 ms 44704 KB Output is correct
26 Correct 165 ms 48464 KB Output is correct
27 Correct 796 ms 78280 KB Output is correct
28 Correct 998 ms 60868 KB Output is correct
29 Correct 1102 ms 61176 KB Output is correct
30 Correct 633 ms 55880 KB Output is correct
31 Correct 482 ms 53752 KB Output is correct
32 Correct 186 ms 46408 KB Output is correct
33 Correct 1018 ms 60744 KB Output is correct
34 Correct 1115 ms 61004 KB Output is correct
35 Correct 614 ms 55652 KB Output is correct
36 Correct 852 ms 53548 KB Output is correct
37 Correct 822 ms 62748 KB Output is correct
38 Correct 1620 ms 85952 KB Output is correct