QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#210476#6331. Jewel Gameucup-team870WA 633ms8520kbC++142.9kb2023-10-11 15:05:002023-10-11 15:05:00

Judging History

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

  • [2023-10-11 15:05:00]
  • 评测
  • 测评结果:WA
  • 用时:633ms
  • 内存:8520kb
  • [2023-10-11 15:05:00]
  • 提交

answer

#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=l; i<=r; i++)
#define per(i,r,l) for(int i=r; i>=l; i--)
#define IOS {cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);}
using namespace std;

typedef long long ll;
typedef pair<int,int> P;

const int N = 33;

vector<int> e[N], sta[N], b[N];

int pos[N], w[N], f[(1<<10)+2][33][33], id[N], du[N][N], vis[N][N];
P tmp[1025];

queue <P> q;
multiset<P> ksj;

int main() {
    int n, m, A, B;
    scanf("%d%d%d%d", &n, &m, &A, &B);
    rep (i, 1, m) {
        int u, v;
        scanf("%d%d", &u, &v);
        e[u].push_back(v);
        b[v].push_back(u);

    }
    int k; scanf("%d", &k);
    rep (i, 1, k) {
        scanf("%d%d", &pos[i], &w[i]);
        id[pos[i]] = i;
    }
    int mx = (1<<k) - 1;
    rep (s, 1, mx) {
        sta[__builtin_popcount(s)].push_back(s);
    }
    rep (s, 1, mx) {
        rep(i, 1, n) {
            rep (j, 1, n) {
                f[s][i][j] = -1e9;
            }
        }
    }
    rep (_, 1, k) {
        for (auto s: sta[_]) {
            auto g = f[s];
            rep (i, 1, n) {
                rep (j, 1, n) {
                    int top = 0;
                    for (auto v: e[i]) {
                        int p = id[v];
                        if ((s>>p-1) & 1) {
                            int t = s ^ (1<<p-1);
                            g[i][j] = max(g[i][j], -f[t][j][v] + w[p]);
                            tmp[++top] = P(-f[t][j][v] + w[p], i * n + j - 1);
                        } else {
                            du[i][j]++;
                        }
                    }
                    if (du[i][j] == 0) {
                        vis[i][j] = 1;
                        q.push(P(i, j));
                    } else {
                        while (top) ksj.insert(tmp[top--]);
                    }
                }
            }
            while (1) {
                while (!q.empty()) {
                    auto [i, j] = q.front();
                    q.pop();
                    for (auto v: b[j]) { //previous: (v, i)
                        du[v][i]--;
                        g[v][i] = max(g[v][i], -g[i][j]);
                        if (du[v][i] == 0) {
                            vis[v][i] = 1;
                            q.push(P(v, i));
                        }
                    }
                }
                if (ksj.empty()) break;
                auto [v, t] = *ksj.begin();
                ksj.erase(ksj.begin());
                int i = t/n, j = t%n+1;
                vis[i][j] = 1;
                g[i][j] = v;
                q.push(P(i, j));
            }

            rep (i, 1, n) {
                rep (j, 1, n) {
                    if (!vis[i][j]) g[i][j] = 0;
                    vis[i][j] = du[i][j] = 0;
                }
            }
        }
    }

    cout << f[mx][A][B];
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3780kb

input:

5 16 1 1
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 2
3 4
3 5
4 2
4 3
4 5
5 2
5 3
5 4
4
2 4
3 84
4 38
5 96

output:

46

result:

ok 1 number(s): "46"

Test #2:

score: 0
Accepted
time: 1ms
memory: 4000kb

input:

8 16 8 4
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 1
1 5
2 6
3 7
4 8
5 1
6 2
7 3
8 4
6
1 29
2 34
3 41
5 7
6 26
7 94

output:

-23

result:

ok 1 number(s): "-23"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3700kb

input:

5 5 2 1
1 1
2 3
3 4
4 5
5 2
2
4 1000000
5 100000

output:

1100000

result:

ok 1 number(s): "1100000"

Test #4:

score: 0
Accepted
time: 3ms
memory: 5100kb

input:

10 20 1 2
1 4
1 7
2 2
2 4
3 6
3 3
4 8
4 7
5 7
5 1
6 9
6 2
7 9
7 3
8 8
8 6
9 7
9 8
10 10
10 2
8
3 92067840
4 2874502
5 36253165
6 70758738
7 4768969
8 16029185
9 16207515
10 44912151

output:

132484345

result:

ok 1 number(s): "132484345"

Test #5:

score: 0
Accepted
time: 631ms
memory: 8480kb

input:

30 900 1 2
2 25
8 21
22 16
26 29
12 24
1 8
7 14
22 27
27 20
5 24
21 21
21 10
30 28
5 16
12 3
16 1
21 2
24 23
24 14
9 7
9 18
20 22
6 1
30 3
11 6
2 17
18 13
28 20
5 15
26 16
9 14
30 23
4 23
4 2
9 5
21 29
1 30
12 14
16 27
28 22
15 7
23 10
13 16
1 15
22 9
13 12
30 18
10 5
25 28
3 17
30 30
7 17
11 24
12 ...

output:

40915541

result:

ok 1 number(s): "40915541"

Test #6:

score: 0
Accepted
time: 633ms
memory: 8520kb

input:

30 900 1 1
16 16
26 15
20 25
9 28
27 1
25 18
12 6
7 26
14 15
28 21
18 19
12 3
26 29
28 24
8 8
22 9
18 3
9 2
26 9
29 21
13 28
21 24
18 2
30 8
1 25
19 26
4 19
2 25
14 27
14 12
2 23
23 15
16 5
9 29
10 27
29 16
16 20
5 8
3 28
12 12
30 7
16 29
30 17
3 11
21 26
18 14
14 6
26 4
21 29
3 6
11 15
22 4
14 18
1...

output:

38892888

result:

ok 1 number(s): "38892888"

Test #7:

score: 0
Accepted
time: 0ms
memory: 3716kb

input:

9 58 5 4
4 6
8 9
5 3
6 5
7 1
5 9
6 3
2 1
4 8
2 9
3 4
1 2
8 5
5 2
1 3
2 3
9 5
4 3
3 1
5 4
9 1
6 7
2 8
7 3
2 5
8 3
2 7
5 8
4 7
9 2
4 5
5 7
3 7
6 8
1 4
9 4
9 8
7 9
1 1
4 4
3 6
1 8
6 6
5 5
9 9
5 1
1 6
2 4
3 2
5 6
3 3
2 6
7 4
6 2
3 9
6 9
8 8
9 7
2
1 28323506
7 18381394

output:

46704900

result:

ok 1 number(s): "46704900"

Test #8:

score: 0
Accepted
time: 0ms
memory: 4072kb

input:

8 11 4 4
4 6
7 6
8 2
5 8
3 4
2 3
8 6
5 1
6 6
1 8
8 4
4
2 75547123
5 9278878
7 13909469
8 57425260

output:

0

result:

ok 1 number(s): "0"

Test #9:

score: 0
Accepted
time: 0ms
memory: 3744kb

input:

4 10 1 2
2 3
1 3
4 4
1 4
3 3
4 3
1 2
3 1
2 4
1 1
2
3 35669800
4 36664186

output:

994386

result:

ok 1 number(s): "994386"

Test #10:

score: -100
Wrong Answer
time: 9ms
memory: 6176kb

input:

17 125 15 14
12 5
13 11
13 12
9 13
16 2
13 3
1 14
16 14
13 10
3 2
17 14
14 12
8 11
10 1
9 8
14 2
13 6
3 3
7 1
11 12
16 17
10 4
15 10
12 11
10 10
4 9
14 16
9 3
4 8
15 5
2 12
7 11
14 1
10 3
4 11
4 4
8 12
8 7
9 16
15 13
17 9
1 10
8 5
13 4
13 16
15 15
9 10
17 4
10 17
2 16
13 1
15 9
5 7
14 11
10 9
5 5
9 ...

output:

25396370

result:

wrong answer 1st numbers differ - expected: '-33927098', found: '25396370'