关于lg将RE显示为TLE
  • 板块灌水区
  • 楼主creation_hy
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/10/2 14:18
  • 上次更新2023/10/27 09:13:18
查看原帖
关于lg将RE显示为TLE
576378
creation_hy楼主2022/10/2 14:18

P1197

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4e5 + 5;
const int MAXM = 4e5 + 5;
int n, m, k, head[MAXM], to[MAXM], nxt[MAXM], tot, ans[MAXN], f[MAXN], a[MAXN], cnt;
bool uninit[MAXN];
inline void link(int u, int v)
{
    to[tot] = v;
    nxt[tot] = head[u];
    head[u] = tot++;
}
int Find(int x)
{
    return x == f[x] ? x : f[x] = Find(f[x]);
}
inline void Union(int u, int v)
{
    int x = Find(u), y = Find(v);
    if (x != y)
    {
        f[y] = x;
        cnt--;
    }
}
inline void Add(int x)
{
    for (int i = head[x]; ~i; i = nxt[i])
        if (!uninit[to[i]])
            Union(x, to[i]);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m;
    int u, v;
    memset(head, -1, sizeof(head));
    for (int i = 1; i <= n; i++)
        f[i] = i;
    for (int i = 1; i <= m; i++)
    {
        cin >> u >> v;
        link(u, v);
        link(v, u);
    }
    cin >> k;
    for (int i = 1; i <= k; i++)
    {
        cin >> a[i];
        uninit[a[i]] = true;
    }
    cnt = n - k;
    for (int i = 1; i <= n; i++)
        if (!uninit[i])
            Add(i);
    ans[k + 1] = cnt;
    for (int i = k; i; i--)
    {
        cnt++;
        uninit[a[i]] = false;
        Add(a[i]);
        ans[i] = cnt;
    }
    for (int i = 1; i <= k + 1; i++)
        cout << ans[i] << '\n';
    return 0;
}

题目范围是2e5,如果手残把MAXN改成1e5+5会TLE 3个点。是我了

然后一开始脑残把link写成了这样子:

inline void link(int u, int v)
{
    to[++tot] = v;
    nxt[tot] = head[u];
    head[u] = tot++;
}

于是TLE了8个点,不应该RE吗

2022/10/2 14:18
加载中...