QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#333962#6396. Puzzle: Kusabitien_noobWA 31ms8768kbC++202.8kb2024-02-20 21:41:502024-02-20 21:41:51

Judging History

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

  • [2024-02-20 21:41:51]
  • 评测
  • 测评结果:WA
  • 用时:31ms
  • 内存:8768kb
  • [2024-02-20 21:41:50]
  • 提交

answer

//Make CSP great again
//Vengeance
#include <bits/stdc++.h>
#define TASK "TESTCODE"
using namespace std;
const int N = 1e5;
vector<int> adj[N + 1];
string base[] = {"Chang", "Duan", "Tong", "-"};
int a[N + 1], dp[N + 1], n;
int match[N + 1];
void DFS(int u)
{
    vector<int> rem[3];
    if (a[u] < 3)
    {
        rem[a[u]].push_back(u);
    }
    for (int v : adj[u])
    {
        DFS(v);
        if (dp[v])
        {
            int k = dp[v];
            if (a[k] < 2)
            {
                if (!rem[a[k] ^ 1].empty())
                {
                    match[k] = rem[a[k] ^ 1].back();
                    rem[a[k] ^ 1].pop_back();
                }
                else 
                {
                    rem[a[k]].push_back(k);
                }
            }
            else 
            {
                if (!rem[2].empty())
                {
                    match[k] = rem[2].back();
                    rem[2].pop_back();
                }
                else 
                {
                    rem[2].push_back(k);
                }
            }
        }
    }
    for (int j = 0, sum = 0; j < 3; ++ j)
    {
        sum += rem[j].size();
        if (sum > 1)
        {   
            cout << "NO";
            exit(0);
        }
        if (!rem[j].empty())
        {
            dp[u] = rem[j].back();
        }
    }
}
void read()
{
    cin >> n;
    for (int i = 2; i <= n; ++ i)
    {   
        string s;
        int u, v;
        cin >> u >> v >> s;
        adj[v].push_back(u);
        a[u] = -1;
        for (int j = 0; j < 4; ++ j)
        {
            if (s == base[j])
            {
                a[u] = j;
                break;
            }
        }
        assert(a[u] != -1);
        //cerr << u << ' ' << a[u] << '\n';
    }
}
void solve()
{   
    a[1] = 3;
    DFS(1);
    if (dp[1])
    {
        cout << "NO";
        return ;
    }
    cout << "YES" << '\n';
    for (int u = 1; u <= n; ++ u)
    {
        if (match[u])
        {   
            if (a[u] == 2)
            {
                assert(a[match[u]] == 2);
            }
            else 
            {
                assert(a[u] == (1 ^ a[match[u]]));
            }
            cout << u << ' ' << match[u] << '\n';
        }
    }
}   
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    if (fopen(TASK".INP", "r"))
    {
        freopen(TASK".INP", "r", stdin);
        //freopen(TASK".OUT", "w", stdout);
    }
    int t = 1;
    bool typetest = false;
    if (typetest)
    {
        cin >> t;
    }
    for (int __ = 1; __ <= t; ++ __)
    {
        //cout << "Case " << __ << ": ";
        read();
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

8
2 1 -
3 1 -
4 2 Tong
5 2 Tong
6 3 Duan
7 3 -
8 7 Chang

output:

YES
5 4
8 6

result:

ok Correct.

Test #2:

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

input:

10
2 1 Duan
3 2 Duan
4 2 -
5 4 Chang
6 2 Chang
7 1 Duan
8 6 Tong
9 6 Tong
10 3 Chang

output:

YES
5 2
7 6
9 8
10 3

result:

ok Correct.

Test #3:

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

input:

2
2 1 Tong

output:

NO

result:

ok Correct.

Test #4:

score: -100
Wrong Answer
time: 31ms
memory: 8768kb

input:

100000
2 1 Duan
3 1 Duan
4 3 -
5 4 Duan
6 3 -
7 4 Duan
8 4 -
9 8 -
10 7 Duan
11 9 -
12 7 Duan
13 7 Duan
14 8 Duan
15 13 -
16 10 Duan
17 11 Duan
18 12 -
19 1 Duan
20 5 Duan
21 4 Duan
22 14 Duan
23 16 -
24 22 Duan
25 16 Duan
26 13 -
27 13 -
28 17 -
29 5 Duan
30 22 -
31 23 -
32 9 Duan
33 5 -
34 30 Duan...

output:

YES
106 86
164 93
181 39
204 126
305 237
323 217
339 253
357 17176
381 90406
393 81
433 62
447 435
532 17836
553 326
563 498
591 320
612 418
730 570
758 56513
811 36529
813 550
867 863
879 531
916 59439
973 969
1008 593
1096 1018
1108 575
1124 1056
1164 893
1184 186
1196 473
1259 478
1261 1168
1262 ...

result:

wrong answer Pair 553-326 symbol not satisfied.