Submission #724200

#TimeUsernameProblemLanguageResultExecution timeMemory
724200danikoynovSwapping Cities (APIO20_swap)C++14
0 / 100
89 ms19704 KiB
#include "swap.h"

#include <bits/stdc++.h>
using namespace std;

struct edge
{
    int v, u, w;

    edge(int _v, int _u, int _w)
    {
        v = _v;
        u = _u;
        w = _w;
    }
};

const int maxn = 4e5 + 10;
const int inf = 1e9 + 10;


int n, m, lead[maxn], rnk[maxn], is_fixed[maxn];


int find_leader(int v)
{
    if (v == lead[v])
        return v;
    return (lead[v] = find_leader(lead[v]));
}

vector < int > g[maxn];
int vertex_cnt, cost[maxn], deg[maxn];
void unite(int v, int u, int w)
{
    deg[v] ++;
    deg[u] ++;
    bool deg_v = (deg[v] > 2), deg_u = (deg[u] > 2);
    v = find_leader(v);
    u = find_leader(u);
    int cur = ++ vertex_cnt;
    lead[cur] = cur;
    cost[cur] = w;
    if (v == u)
    {
        lead[v] = cur;
        is_fixed[cur] = 1;
        g[cur].push_back(v);
        return;
    }


    is_fixed[cur] = max(is_fixed[v], is_fixed[u]);
    if (deg_v || deg_u)
        is_fixed[cur] = 1;
    lead[v] = lead[u] = cur;
    g[cur].push_back(v);
    g[cur].push_back(u);
}

vector < edge > edges;
void init(int N, int M,
          vector<int> U, vector<int> V, vector<int> W)
{
    n = N;
    m = M;
    for (int i = 0; i < m; i ++)
    {
        edges.push_back(edge(U[i], V[i], W[i]));
    }
}



int getMinimumFuelCapacity(int X, int Y)
{

    return -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...