QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#873941#9677. 基础博弈练习题A_programmer0 64ms102396kbC++172.4kb2025-01-27 09:48:372025-01-27 09:48:38

Judging History

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

  • [2025-01-27 09:48:38]
  • 评测
  • 测评结果:0
  • 用时:64ms
  • 内存:102396kb
  • [2025-01-27 09:48:37]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
const int maxn = 1e6 + 5;
const int inf = 0x3f3f3f3f;

int a[maxn], b[maxn], q[maxn], in[maxn], ans[maxn], n;
vector<int> g[maxn], vec[maxn], p[maxn];
bool vis[maxn];

int dfn[maxn], low[maxn], cnt;
int ind[maxn], stk[maxn], tp, dot;
void tarjan(int u)
{
    dfn[u] = low[u] = ++cnt;
    stk[++tp] = u;
    for (int v : g[u])
        if (!dfn[v]) tarjan(v), low[u] = min(low[u], low[v]);
        else if (!ind[v]) low[u] = min(low[u], dfn[v]);
    if (low[u] == dfn[u])
    {
        ind[u] = ++dot, vec[dot].emplace_back(u);
        while (stk[tp] != u) ind[stk[tp]] = dot, vec[dot].emplace_back(stk[tp]), tp--;
        tp--;
    }
}

void Topo()
{
    int hd = 1, tl = 0;
    for (int i = 1; i <= dot; i++) if (!in[i]) q[++tl] = i;
    while (hd <= tl)
    {
        int u = q[hd++];
        for (int v : p[u])
            if (--in[v] == 0) q[++tl] = v;
    }
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    int m, k; cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= k; i++) cin >> b[i];
    for (int i = 1; i <= m; i++)
    {
        int u, v; cin >> u >> v;
        g[u].emplace_back(v);
    }
    for (int i = 1; i <= n; i++)
        if (!dfn[i]) tarjan(i);
    for (int u = 1; u <= n; u++)
        for (int v : g[u]) if (ind[u] != ind[v]) p[ind[u]].emplace_back(ind[v]), in[ind[v]]++;
    Topo();

    for (int i = dot; i; i--)
    {
        int id = q[i]; ans[id] = inf;
        for (int v : p[id])
        {
            ans[id] = min(ans[id], ans[v]);
            if (vec[v].size() == 1 && ans[v] > a[vec[v][0]]) ans[id] = min(ans[id], a[vec[v][0]] - 1);
        }

        int mn = inf;
        for (int u : vec[id])
        {
            vis[a[u]] = 1;
            mn = min(mn, a[u]);
        }
        if (mn > ans[id]) continue;
        int pos = mn;
        while (pos <= k && pos <= ans[id] && vis[pos]) pos++; pos--;
        for (int u : vec[id]) vis[a[u]] = 0;
        if (pos == ans[id] && mn != pos) ans[id] = min(ans[id], mn + ((mn ^ pos ^ 1) & 1) - 1);
        else if (pos != ans[id] && vec[id].size() > 1) ans[id] = min(ans[id], mn + ((mn ^ pos) & 1) - 1);
    }
    for (int i = 1; i <= n; i++) cout << (ans[ind[i]] == inf ? -1 : ans[ind[i]]) << " ";
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 6ms
memory: 85740kb

input:

83 93 13
8 9 10 7 7 7 6 3 1 10 6 2 5 7 1 3 4 2 1 10 7 4 8 9 2 2 1 9 2 5 1 7 8 6 1 9 9 10 4 1 2 9 2 3 4 2 9 10 8 1 4 1 8 4 1 4 4 7 4 8 2 9 2 5 2 2 3 3 8 5 2 9 3 10 8 8 1 6 6 1 6 7 10
7 5 10 3 2 2 7 4 8 7 6 6 5
56 36
33 41
32 62
37 7
6 53
41 13
9 36
44 77
38 62
76 16
72 5
40 13
55 60
5 78
72 45
13 44
...

output:

0 -1 -1 -1 1 0 -1 3 0 -1 0 -1 0 0 2 -1 0 -1 0 0 -1 0 -1 1 -1 -1 -1 -1 -1 -1 0 0 0 -1 0 -1 2 0 0 0 0 0 -1 0 -1 -1 0 0 0 -1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 7 -1 0 0 -1 -1 1 1 1 -1 1 -1 2 0 0 0 0 0 

result:

wrong answer 5th numbers differ - expected: '2', found: '1'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 64ms
memory: 102396kb

input:

100000 355071 10000
5 7 4 7 4 1 10 5 9 4 9 4 3 10 5 4 9 1 7 10 1 6 10 3 10 9 8 4 6 3 10 8 6 8 3 5 10 9 7 7 1 3 8 8 6 2 8 4 2 9 1 10 3 6 3 8 9 10 5 7 3 2 1 5 7 4 3 4 6 4 2 7 2 5 5 6 4 6 7 4 4 6 4 2 3 9 9 9 10 8 1 6 7 2 9 8 2 3 1 6 9 4 10 3 10 1 2 3 3 4 1 1 1 5 8 6 8 3 1 6 2 9 5 9 4 7 2 10 7 5 2 2 7 4...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

wrong answer 383rd numbers differ - expected: '9', found: '7'

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%