QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#531553#4513. Slide Paradeorz_z0 3332ms96976kbC++143.5kb2024-08-24 21:07:562024-08-24 21:07:56

Judging History

你现在查看的是最新测评结果

  • [2024-08-24 21:07:56]
  • 评测
  • 测评结果:0
  • 用时:3332ms
  • 内存:96976kb
  • [2024-08-24 21:07:56]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int N = 5e2 + 5, M = 4e4 + 5;
int n, m;
int U[M], V[M];
int fir[N], nxt[M], st[M], to[M], ect = 1;
inline void addedge(int u1, int v1) {
    nxt[++ect] = fir[u1];
    fir[u1] = ect;
    to[ect] = v1;
    st[ect] = u1;
}
bool vis[N];
int mth[N], mthe[N];
bool dfs(int x) {
    for (int i = fir[x], y; y = to[i], i; i = nxt[i])
        if (!vis[y]) {
            vis[y] = 1;
            if (!mth[y] || dfs(mth[y])) {
                mth[x] = y;
                mth[y] = x;
                mthe[x] = i;
                return 1;
            }
        }
    return 0;
}
int pv[N], pe[N];
void Bfs(int st) {
    queue<int> Q;
    for (int i = 1; i <= n + n; i++) vis[i] = pv[i] = pe[i] = 0;
    Q.push(st);
    vis[st] = true;
    while (!Q.empty()) {
        int x = Q.front();
        Q.pop();
        // printf("st,x:%d,%d\n",st,x);
        if (x > n) {
            int y = mth[x];
            if (vis[y]) continue;
            pv[y] = x;
            pe[y] = mthe[y];
            Q.push(y);
            vis[y] = true;
        } else
            for (int i = fir[x], y; y = to[i], i; i = nxt[i])
                if (i != mthe[x] && !vis[y]) {
                    vis[y] = true;
                    pv[y] = x;
                    pe[y] = i;
                    Q.push(y);
                }
    }
}
vector<int> Ans;
namespace Euler {
    const int N = 1e3 + 5, M = 4e6 + 5;
    int fir[N], nxt[M], to[M], ect = 1, sgn[M];
    inline void addvir(int u1, int v1) {
        // printf("vir:%d->%d\n",u1,v1);
        nxt[++ect] = fir[u1];
        fir[u1] = ect;
        to[ect] = v1;
        sgn[ect] = 0;
    }
    void Euler(int x) {
        for (int &i = fir[x], y; y = to[i], i; i = nxt[i]) {
            if (sgn[i]) continue;
            sgn[i] =  true;
            Euler(y);
        }
        Ans.push_back(x);
    }
    void Clr(int n) {
        ect = 1;
        for (int i = 1; i <= n; i++) fir[i] = 0;
        Ans.clear();
    }
}
 
map<pair<int, int>, bool> mp;
 
bool inmth[M];
void work() {
    mp.clear();
    cin >> n >> m;
    for (int i = 1; i <= m; i++) cin >> U[i] >> V[i];
    for (int i = 1; i <= n + n; i++)
        pv[i] = pe[i] = mth[i] = vis[i] = mthe[i] = fir[i] = 0;
    Euler::Clr(n);
    ect = 1;
    for (int i = 1; i <= m; i++)
        addedge(U[i], V[i] + n);
    for (int i = 1; i <= n; i++) if(!mth[i]) {
        for (int j = 1; j <= n + n; j++) vis[j] = 0;
        if (!dfs(i)) return puts("IMPOSSIBLE"), void();
    }
    for (int i = 1; i <= ect; i++) inmth[i] = 0;
    for (int i = 1; i <= n; i++) inmth[mthe[i]] = true;
    for (int i = 1; i <= m; i++) if(!mp[{U[i], V[i]}]) {
        int u = U[i], v = V[i] + n;
        if (mth[u] != v) {
            mth[mth[u]] = 0;
            for (int j = 1; j <= n + n; j++) vis[j] = 0;
            vis[v] = 1;
            if (!dfs(mth[v])) return puts("IMPOSSIBLE"), void();
            else mth[u] = v, mth[v] = u;
        }
        for (int j = 1; j <= n; j++)
            Euler::addvir(j, mth[j] - n), mp[{j, mth[j] - n}] = 1;
    }
    Euler::Euler(1);
    if (Ans.size() != Euler::ect) return puts("IMPOSSIBLE"), void();
    printf("YES\n");
    printf("%d\n", (int)Ans.size());
    reverse(Ans.begin(), Ans.end());
    for (auto i : Ans) printf("%d ", i);
    printf("\n");
}
int main() {
    int T;
    cin >> T;
    for (int _ = 1; _ <= T; _++) {
        work();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 8140kb

input:

100
5 8
1 2
1 3
1 4
1 5
2 1
3 1
4 1
5 1
5 10
1 3
1 4
2 3
2 5
3 1
3 4
3 5
4 2
5 1
5 3
5 10
1 4
2 3
2 5
3 1
3 5
4 2
4 3
4 5
5 1
5 2
3 6
1 2
1 3
2 1
2 3
3 1
3 2
5 10
1 2
1 5
2 3
2 4
3 1
4 3
4 5
5 2
5 3
5 4
4 10
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 4
4 2
4 3
5 10
1 2
1 3
2 1
2 4
3 1
3 5
4 2
4 5
5 3
5 4
5 10
1 ...

output:

IMPOSSIBLE
YES
16
1 4 2 5 3 1 4 2 3 5 1 3 4 2 5 1 
YES
16
1 4 2 3 5 1 4 3 1 4 5 2 5 2 3 1 
YES
7
1 3 2 1 2 3 1 
YES
16
1 2 4 5 3 1 5 2 4 5 4 3 1 2 3 1 
YES
17
1 3 4 2 1 4 2 3 1 3 1 2 4 2 4 3 1 
YES
11
1 3 5 4 2 1 2 4 5 3 1 
YES
16
1 4 3 5 2 1 4 2 4 2 3 5 1 3 5 1 
YES
17
1 3 2 4 1 4 1 4 3 2 3 2 1 3 4...

result:

wrong output format Expected 'Case' but found 'IMPOSSIBLE' (test case 1)

Test #2:

score: 0
Wrong Answer
time: 3332ms
memory: 96976kb

input:

100
199 4980
1 95
1 96
1 105
1 124
1 130
1 131
1 135
1 137
1 139
1 140
1 141
1 147
1 155
1 172
1 174
1 179
1 183
1 188
1 193
1 196
1 197
2 3
2 5
2 13
2 14
2 17
2 20
2 24
2 26
2 30
2 41
2 44
2 45
2 52
2 56
2 67
2 70
2 71
2 74
2 78
2 84
2 85
2 90
2 92
2 93
2 97
2 107
2 111
2 113
2 122
2 124
2 128
2 13...

output:

IMPOSSIBLE
IMPOSSIBLE
YES
145601
1 61 90 57 31 134 34 43 9 136 14 64 47 89 164 129 137 193 7 5 101 86 139 10 151 97 141 100 170 50 79 178 117 158 185 54 60 161 142 194 103 75 6 110 108 153 174 88 15 173 180 197 200 11 152 177 40 166 17 184 104 130 125 102 179 122 1 28 38 52 84 156 169 16 167 126 3 4...

result:

wrong output format Expected 'Case' but found 'IMPOSSIBLE' (test case 1)