Submission #1308738

#TimeUsernameProblemLanguageResultExecution timeMemory
1308738ofozIsland Hopping (JOI24_island)C++20
2 / 100
4 ms440 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);
    auto addEdge = [&](int a, int b) {
        if (edge[a][b]) return;
        adj[a].push_back(b);
        adj[b].push_back(a);
        edge[a][b] = edge[b][a] = 1;
        
        answer(a, b);
    };
    
    for (int v = n; v >= 1; v--) {
        if (sol[v]) continue;
        for (int k = 1; k < n; k++) {
            int q = query(v, k);
            if (!edge[v][q]) {
                adj[v].push_back(q);
                adj[q].push_back(v);
                bool b = hasCycle(adj);
                adj[v].pop_back();
                adj[q].pop_back();
                if (b) break;
            }
            
            if (sol[q]) { break; }

            addEdge(v, q);
            int k2 = 1;
            int q2;
            while (k2 != v && edge[q][k2]) k2++;
            while (!edge[q][q2 = query(q, k2)]) {
                addEdge(q, q2);
                k2++;
                if (edge[q][q2+1]) break;
            }

            sol[q] = 1;
        }
        sol[v] = 1;
    }
}
#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...