QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#114573#852. Jellyfish202032110146RE 1ms3512kbC++172.9kb2023-06-22 17:06:472023-06-22 17:06:51

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:06:51]
  • Judged
  • Verdict: RE
  • Time: 1ms
  • Memory: 3512kb
  • [2023-06-22 17:06:47]
  • 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;
        }
        if (!loop.empty())return;
        stk.push(v);
        vis[v] = 1;
        dfs(v, x, to, vis, stk, loop);
        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;
    int cnt = 0;
    for (int i = 0; i < (int) loop.size(); i++) {
        if (cal[loop[i]]) {
            res += cal[loop[i]];
            cnt++;
        } 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++) {
        if (_ != 2) {
            if (i == 3000)return 0;
        }
        solve();
    }
    return 0;
}
/*
2
6
1 2
2 3
3 4
4 1
2 5
2 6
4
1 2
2 3
3 4
4 1
*/

详细

Test #1:

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

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

result:

ok 2 number(s): "4 3"

Test #2:

score: -100
Dangerous Syscalls

input:

85665
6
3 2
4 1
4 6
2 1
2 6
5 1
7
6 2
6 3
5 1
1 2
2 4
4 7
3 7
7
6 1
6 7
1 4
1 3
7 5
5 3
4 2
7
6 2
7 4
7 5
3 1
3 4
2 5
1 4
7
7 2
2 6
5 4
5 6
5 1
3 1
4 6
7
3 5
3 1
3 7
3 2
5 1
5 4
4 6
7
4 5
4 1
3 6
3 7
6 7
6 1
2 1
7
5 3
7 3
1 4
6 2
6 3
2 3
4 3
7
2 3
2 6
2 4
7 5
3 5
5 1
1 4
7
3 4
3 7
5 6
2 7
4 6
6 7
6 ...

output:


result: