QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#114596#852. Jellyfish202032110146WA 1ms3456kbC++202.8kb2023-06-22 17:22:432023-06-22 17:22:44

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-22 17:22:44]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3456kb
  • [2023-06-22 17:22:43]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#pragma GCC optimize(3)
#define debug(x...)             \
    do {                      \
        cout << #x << " -> ";\
        err(x);               \
    } while (0)

void err() {
    cout << endl;
}

template<class T, class... Ts>
void err(const T &arg, const Ts &... args) {
    cout << arg << ' ';
    err(args...);
}

const ll INF = 0x3f3f3f3f3f3f3f3f;//2147483647;
const ll MOD[2] = {1000000007, 998244353};
const ll base[2] = {131, 13331};
const double pi = acos(-1.0);

const int N = 25050, M = 5050 << 1;
const ll mod = MOD[0];

int n;

void dfs(int x, int pre, vector<vector<int>> &to, vector<int> &vis, stack<int> &stk, vector<int> &loop) {
    if (!loop.empty())return;
    for (auto v: to[x]) {
        if (v == pre)continue;
        if (vis[v]) {
            while (!stk.empty() && stk.top() != v) {
                loop.push_back(stk.top());
                stk.pop();
            }
            loop.push_back(v);
            return;
        }
        stk.push(v);
        vis[v] = 1;
        dfs(v, x, to, vis, stk, loop);
        if (!loop.empty())return;
        stk.pop();
        vis[v] = 0;
    }
}

int DFS(int x, int pre, vector<vector<int>> &to, vector<int> &vis) {
    if (to[x].size() == 1)return 1;
    int res = 0;
    for (auto v: to[x]) {
        if (v == pre)continue;
        if (vis[v])continue;
        res += DFS(v, x, to, vis);
    }
    return res;
}

void solve() {
    cin >> n;
    vector<vector<int>> G(n + 1, vector<int>());
    for (int i = 1, u, v; i <= n; i++) {
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    vector<int> vis(n + 1, 0);
    stack<int> stk;
    stk.push(1);
    vis[1] = 1;
    vector<int> loop;
    dfs(1, 0, G, vis, stk, loop);
    for (auto i: loop) {
        cout << i << " ";
    }
    cout << "\n";
    vector<int> in_loop(n + 1, 0);
    for (auto i: loop) {
        in_loop[i] = 1;
    }
    vector<int> cal(n + 1, 0);
    int ans = 3;
    for (auto i: loop) {
        cal[i] = DFS(i, 0, G, in_loop);
    }
    int res = 0;
    int neighbor = 0;
    for (int i = 0; i < (int) loop.size(); i++) {
        if (cal[loop[i]]) {
            res += cal[loop[i]];
        } else {
            int nxt = loop[(i + 1) % (int) loop.size()];
            if (!cal[nxt])neighbor = 1;
        }
    }
    if (neighbor) {
        ans = max(ans, res + 2);
    } else {
        ans = max(ans, res + 1);
    }
    cout << ans << "\n";
}


signed main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int _ = 1;
    cin >> _;
    for (int i = 1; i <= _; i++) {
        solve();
    }
    return 0;
}
/*
1
6
3 2
4 1
4 6
2 1
2 6
5 1
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3456kb

input:

2
6
1 2
2 3
3 4
4 1
2 5
2 6
4
1 2
2 3
3 4
4 1

output:

4 3 2 1 
4
4 3 2 1 
3

result:

wrong answer Output contains longer sequence [length = 10], but answer contains 2 elements