为什么会T一个点
查看原帖
为什么会T一个点
1066396
szm111213楼主2025/7/27 22:16
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
struct edge
{
    int v, s, p[MAXN];
}cun[MAXN];
int N, K, p, R, day[MAXN];
bool vis[MAXN];
vector<int> cnt[MAXN];
queue<int> q;
int main()
{
    scanf("%d%d%d", &N, &K, &p);
    for (int i = 1; i <= p; i++)
    {
        int x;
        scanf("%d", &x);
        cnt[0].push_back(x);
    }
    scanf("%d", &R);
    for (int i = 1; i <= R; i++)
    {
        scanf("%d%d", &cun[i].v, &cun[i].s);
        for (int j = 1; j <= cun[i].s; j++)
        {
            scanf("%d", &cun[i].p[j]);
        }
    }
    for (int i = 0; i <= N; i++)
    {
        day[i] = -1;
    }
    for (auto x : cnt[0])
    {
        day[x] = 0;
        q.push(x);
    }
    int ans = -1;
    while (!q.empty())
    {
        int u = q.front();
        q.pop();
        if (u == K)
        {
            ans = day[u];
            break;
        }
        if (vis[u])
        {
            continue;
        }
        vis[u] = true;
        for (int i = 1; i <= R; i++)
        {
            bool flag = false;
            for (int j = 1; j <= cun[i].s; j++)
            {
                if (!vis[cun[i].p[j]])
                {
                    flag = true;
                    break;
                }
            }
            if (!flag)
            {
                for (int j = 1; j <= cun[i].s; j++)
                {
                    if (day[cun[i].p[j]] == day[u])
                    {
                        if (day[cun[i].v] == -1)
                        {
                            day[cun[i].v] = day[u] + 1;
                            q.push(cun[i].v);
                        }
                        break;
                    }
                }
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}
2025/7/27 22:16
加载中...