TLE#7

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

hzxphy @ 2023-09-27 21:06:50

#include <bits/stdc++.h>
using namespace std;
struct edge{
    int u, v;
};
edge edges[1050];
set<int> s;
int D[2050];
int g[2050][2050];
int a[2050];
int GIN;
int M;
map<int, int> IO_m;
int OI_m[2050];
inline void Append(int u, int v) {
    g[u][v]++; g[v][u]++;
    D[u]++;
    D[v]++;
}
inline int InGraph() {
    for (int i = 1; i <= M; i++) {
        Append(IO_m[edges[i].u], IO_m[edges[i].v]);
    }
    for (int i = 1; i <= (int)s.size(); i++) {
        if (D[i] & 1) {
            return i;
        }
    }
    return 1;
}
inline void DFS(int U, int Len) {
    if (Len == M + 1) {
        for (int i = 1; i <= M + 1; i++) {
            cout << OI_m[a[i]] << '\n';
        }
//      cout << '\n';
        exit(0);
    }
    for (int i = 1; i <= (int)s.size(); i++) {
        if (!g[U][i]) {
            continue;
        }
        g[U][i]--;g[i][U]--;;
        a[Len + 1] = i;
        DFS(i, Len + 1);
        g[U][i]++;g[i][U]++;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> M;
    for (int i = 1; i <= M; i++) {
        cin >> edges[i].u >> edges[i].v;
        s.insert(edges[i].u);
        s.insert(edges[i].v);
    }
    int c = 0;
    for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
        c++;
        IO_m[*it] = c;
        OI_m[c] = *it;
    }
    GIN = InGraph();
    a[1] = GIN;
    DFS(GIN, 1);
    return 0;
}

|