Submission #1167884

#TimeUsernameProblemLanguageResultExecution timeMemory
1167884FedShatMatching (COCI20_matching)C++20
0 / 110
0 ms328 KiB
#include <bits/stdc++.h>
#define int long long

using namespace std;
const long long inf = 1e18 + 7;
vector<vector<int>> g;
vector<bool> used;
vector<int> pr;

bool dfs(int v){
    if(used[v]){
        return false;
    }
    used[v] = true;
    for(auto u: g[v]){
        if(pr[u] == -1 || dfs(pr[u])){
            pr[u] = v;
            pr[v] = u;
            return true;
        }
    }
    return false;
}

signed main(){
#ifdef rog
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios_base::sync_with_stdio(false);

    int n;
    cin >> n;
    g.resize(n);
    used.resize(n);
    pr.resize(n, -1);

    vector<pair<int, int>> arr(n);
    for(int i = 0;i < n;i++){
        cin >> arr[i].first >> arr[i].second;
    }

    for(int i = 0;i < n;i++){
        for(int j = i + 1;j < n;j++){
            if(arr[i].first == arr[j].first || arr[i].second == arr[j].second){
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }

    bool fl = true;
    for(int i = 0;i < n;i++){
        if(pr[i] == -1){
            used = vector<bool>(n, false);
            if(!dfs(i)){
                fl = false;
                break;
            }
        }
    }

    if(fl){
        cout << "DA" << endl;
        for(int i = 0;i < n;i++){
            if(pr[i] > i){
                cout << i + 1 << " " << pr[i] + 1 << endl;
            }
        }
    }else{
        cout << "NE" << endl;
    }

    return 0;
}
#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...