Submission #1081760

# Submission time Handle Problem Language Result Execution time Memory
1081760 2024-08-30T10:10:47 Z TB_ Pipes (CEOI15_pipes) C++17
40 / 100
304 ms 22136 KB
#include <bits/stdc++.h>
 
using namespace std;
 
#define ll int
#define fo(i, n) for(ll i = 0; i<(n); i++)
#define F first 
#define S second
#define pb push_back
#define deb(x) cout << #x << " = " << (x) << endl
#define deb2(x, y) cout << #x << " = " << (x)  << ",  " << #y << " = " << (y) << endl
 
 
typedef vector<int> vl;
typedef vector<vl> vvl;
 
 
struct UnionFind{
    int n;
    vl p;
    UnionFind(int n){
        p.resize(n);
        fo(i, n) p[i] = i;
    }
 
    int find(int x){
        if(p[x] == x) return x;
        return p[x] = find(p[x]);
    }
 
    bool same(int a, int b){
        return find(a) == find(b);
    }
 
    void unite(int a, int b){
        a = find(a);
        b = find(b);
        if(rand()%2) swap(a, b);
        p[b] = a;
    }
};
 
 
int main(){
    cin.tie(0)->sync_with_stdio(0);
 
    int n, m, from, to;
    cin >> n >> m;
  if(n>75000) throw("lol");
    vl xorv(n, 0), amount(n, 0), hash(n, 0);
    UnionFind uf(n);
    mt19937 rng(42);
    fo(i, m){
        cin >> from >> to;
        from--; to--;
        if(uf.same(from, to)){
            ll val = rng();
            hash[from]^=val;
            hash[to]^=val;
        }else{
            amount[from]++;
            amount[to]++;
            xorv[from]^=to;
            xorv[to]^=from;
            uf.unite(from, to);
        }
    }
 
 
    ll pos;
    fo(i, n){
        pos=i;
        while(1){
            if(amount[pos] != 1) break;
            ll edge = xorv[pos];
            if(!hash[pos]) cout << pos+1 << " " << edge+1 << endl;
            amount[pos]--;
            amount[edge]--;
            xorv[pos]^=edge;
            xorv[edge]^=pos;
            hash[edge]^=hash[pos];
            pos = edge;
            if(amount[edge] != 1) break;
        }
    }
 
 
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 456 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 604 KB Output is correct
2 Correct 2 ms 624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 64 ms 5712 KB Output is correct
2 Correct 62 ms 5716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 104 ms 10036 KB Output is correct
2 Correct 119 ms 11704 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 190 ms 16724 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 304 ms 22136 KB Memory limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 600 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 540 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 604 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -