我是ItzRealMe,我可以解决问题(2026 06 8级T1,T2已完成)

2 条评论

  • @ 2026-09-02 22:42:30

    2564如果会的话

    • @ 2026-09-05 17:13:06

      洛谷过了

      #include <iostream>
      #include <vector>
      #include <cstring>
      using namespace std;
      const int MAXN = 305;
      bool anc[MAXN][MAXN];
      int fa[MAXN];
      void get_ancestor(int x)
      {
          int cur = x;
          while(true)
          {
              anc[x][cur] = true;
              if(cur == 0) break;
              cur = fa[cur];
          }
      }
      
      int main()
      {
          int N;
          cin >> N;
          for(int i = 1; i <= N-1; ++i)
          {
              cin >> fa[i];
          }
          memset(anc, 0, sizeof(anc));
          for(int i = 0; i < N; ++i)
          {
              get_ancestor(i);
          }
      
          int Q;
          cin >> Q;
          while(Q--)
          {
              int m;
              cin >> m;
              vector<int> pts(m);
              for(int i = 0; i < m; ++i)
              {
                  cin >> pts[i];
              }
              int ans = 0;
              for(int cand = N-1; cand >=0; cand--)
              {
                  bool ok = true;
                  for(int p : pts)
                  {
                      if(!anc[p][cand])
                      {
                          ok = false;
                          break;
                      }
                  }
                  if(ok)
                  {
                      ans = cand;
                      break;
                  }
              }
              cout << ans << endl;
          }
          return 0;
      }
      
    • @ 2026-09-05 17:35:06

      @ItzRealMe: 我原代码洛谷也过了,但是vijos过不了(60pts)

    • @ 2026-09-06 16:07:47

      @202607gj03盛辰 (shengchen): 这里的网站怎么会总是坏掉,评测机有问题还是网站人太多崩溃了?

    • @ 2026-09-06 16:10:50

      @202607gj03盛辰 (shengchen):

      #include<bits/stdc++.h>
      using namespace std;
      const int N = 305;
      int fa[N], dep[N];
      bool vis[N];
      vector<int> ch[N];
      int getdep(int x) {
          return x == 0 ? 0 : getdep(fa[x]) + 1;
      }
      void dfs(int x) {
          vis[x] = 1;
          for (int y : ch[x])
              dfs(y);
      }
      bool check(int x, int n, const vector<int> &vec) {
          for(int i = 0; i <= n; i ++)
              vis[i] = 0;
          dfs(x);
          for (int y : vec)
              if(! vis[y])
                  return 0;
          return 1;
      }
      int main() {
          int n;
          scanf("%d", &n);
          for(int i = 1; i < n; i ++) {
              scanf("%d", &fa[i]);
              ch[fa[i]].push_back(i);
          }
          for(int i = 1; i < n; i ++)
              dep[i] = getdep(i);
      
          int q;
          scanf("%d", &q);
          while(q --) {
              int m, mnd = n + 1;
              scanf("%d", &m);
              vector<int> vec(m);
              for(int i = 0; i < m; i ++) {
                  scanf("%d", &vec[i]);
                  mnd = min(mnd, dep[vec[i]]);
              }
              for (int i = n - 1; i >= 0; i --)
                  if (dep[i] <= mnd && check(i, n, vec)) {
                      printf("%d\n", i);
                      break ;
                  }
          }
          return 0;
      }
      

      这个代码洛谷也能过,但这个网站只能40pts

    • @ 2026-09-10 22:03:52

      @ItzRealMe: 我不知道可能最近就是这样

    • @ 2026-09-10 22:04:57

      @ItzRealMe: 这个鬼题目甚至是六级的壳,八级的题。

  • 你是谁

  • 1