Submission #1308829

#TimeUsernameProblemLanguageResultExecution timeMemory
1308829ofozIsland Hopping (JOI24_island)C++20
65 / 100
6 ms452 KiB
#include <bits/stdc++.h>
using namespace std;
#include "island.h"
#define vc vector<char>
#define vi vector<int>
#define vii vector<vi>
#define viii vector<vii>
#define viiii vector<viii>
#define viiiii vector<viiii>
#define vb vector<bool>
#define pi pair<double, double>

void dfs(int v, int p, vb& vis, vii& adj, bool& res) {
    if (vis[v]) { res = 1; return; }
    vis[v] = 1;
    for (int to : adj[v]) {
        if (to == p) continue;
        dfs(to, v, vis, adj, res);
    } 
}

bool hasCycle(vii& adj) {
    int n = adj.size()-1;
    bool res = 0;
    vb vis(n+1, 0);
    for (int v = 1; v <= n; v++) {
        if (!vis[v]) dfs(v, -1, vis, adj, res);
    }
    return res;
}



void solve(int n, int L) {
    vb sol(n+1, 0);
    vector<vb> edge(n+2, vb(n+2, 0));
    vii adj(n+1);
    int cnt = 0;
    auto addEdge = [&](int a, int b) {
        // cerr << a << ' ' << b << endl;
        if (edge[a][b]) return;
        adj[a].push_back(b);
        adj[b].push_back(a);
        edge[a][b] = edge[b][a] = 1;
        cnt++;
        answer(a, b);
    };
    
    for (int v = 1; v <= n; v++) {
        int c = adj[v].size();
        for (int k = c+1; k < n; k++) {
            int q = query(v, k);
            if (k == 1) { addEdge(v, q); continue; }
            adj[q].push_back(v);
            adj[v].push_back(q);
            bool b = hasCycle(adj);
            adj[q].pop_back();
            adj[v].pop_back();
            if (q < v || b) break;
            int q2 = query(q, adj[q].size()+1);
            if (q2 != v) break;
            addEdge(v, q);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...