求dalao帮忙调DFS, 76pts
查看原帖
求dalao帮忙调DFS, 76pts
542773
leogao120129楼主2023/10/20 08:02

rt

TLE #20,#21, #22, #23, #24, #25

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 500010;
int n, m;
vector<int>g[N];
PII edge[N];
int ans[N], path[N];
int cnt, state;
int du, dv;
bool st[N];
bool dfs(int u){
    path[cnt ++ ] = u;
    st[u] = true;
    if(!state){
        if(path[cnt - 1] < ans[cnt - 1]) state = -1;
        else if(path[cnt - 1] > ans[cnt - 1]){ state = 1; return true;}
    }
    for(auto x: g[u]){
        if(x == du & u == dv || x == dv && u == du)continue;
        if(!st[x] && dfs(x))return true;
    }
    return false;
}
int main(){
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i ++ ){
        int a, b;
        scanf("%d%d", &a, &b);
        edge[i] = {a, b};
        g[a].push_back(b);
        g[b].push_back(a);
    }
    for (int i = 1; i <= n; i ++ ){
        sort(g[i].begin(), g[i].end());
    }
    memset(ans, 0x3f, sizeof ans);
    if(n == m){
        for (int i = 0; i < m; i ++ ){
            du = edge[i].x, dv = edge[i].y;
            memset(st, 0, sizeof st);
            cnt = state = 0;
            dfs(1);
            if(cnt == n && state < 0){
                memcpy(ans, path, sizeof ans);
            }
        }
    }else{
        dfs(1);
        memcpy(ans, path, sizeof ans);
    }
    for (int i = 0; i < n; i ++ ){
        printf("%d ", ans[i]);
    }
    return 0;
}
2023/10/20 08:02
加载中...