我也是枚举每个点,看是否联通,为啥会超时??
  • 板块P1793 跑步
  • 楼主Man_CCNU
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/1/17 18:00
  • 上次更新2023/10/28 12:07:39
查看原帖
我也是枚举每个点,看是否联通,为啥会超时??
524191
Man_CCNU楼主2022/1/17 18:00
#include<iostream>
#include<cstring>
#include<vector>

using namespace std;

const int N = 2e3 + 10, M = 8e3 + 10;
int h[N], e[M], ne[M], idx, n, m, res;
bool f[N];
vector<int> vec;

void connec(int x, int y)
{
    e[idx] = y;
    ne[idx] = h[x];
    h[x] = idx++;

    return;
}
void dfs(int i)
{
    if (f[n]) return;
    f[i] = 1;
    for (int k = h[i]; k != -1; k = ne[k]) {
        auto index_ = e[k];
        if (f[index_]) continue;
        dfs(index_);
    }
}
int main()
{
    cin >> n >> m;
    memset(h, -1, sizeof h);
    for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        connec(x, y);
        connec(y, x);
    }
    for (int i = 2; i <= n - 1; i++) {
        memset(f, 0, sizeof f);
        f[i] = 1;
        dfs(1);
        if (!f[n]) {
            vec.push_back(i);
            res++;
        }
    }
    cout << res << endl;
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }
    cout << endl;

    return 0;
}
2022/1/17 18:00
加载中...