제출 #1188203

#제출 시각아이디문제언어결과실행 시간메모리
1188203anmattroiSimurgh (IOI17_simurgh)C++17
0 / 100
53 ms2884 KiB
#include "simurgh.h"
#include <bits/stdc++.h>
#define maxn 505
#define fi first
#define se second
using namespace std;
using ii = pair<int, int>;

vector<int> adj[maxn];

vector<int> find_roads(int n, vector<int> u, vector<int> v) {
    int m = u.size();
    vector<int> cl(m+1, 0);
    for (int i = 0; i < m; i++) {
        adj[u[i]].emplace_back(i);
        adj[v[i]].emplace_back(i);
    }

    for (int i = 0; i < n; i++) {
        if (adj[i].size() != n-1) continue;
        if (count_common_roads(adj[i]) == n-1) return adj[i];
    }
    for (int o = 0; o < n; o++) {
        int nex = (o+1)%n;
        vector<int> indice = adj[nex];
        for (int i = 0; i < indice.size(); i++) {
            if (u[indice[i]] == o || v[indice[i]] == o) {swap(indice.back(), indice[i]); break;}
        }
        indice.pop_back();
        vector<ii> nho;
        for (int i : adj[o]) {
            if (cl[i] == 1) continue;

            indice.emplace_back(i);
            nho.emplace_back(i, count_common_roads(indice));
            indice.pop_back();
        }
//        for (auto [u, v] : nho) cout << u << ' ' << v << "\n";
//        cout << "----------------\n";
        int mx = 0, dif = 0;
        for (auto [u, v] : nho) mx = max(mx, v);
        for (auto [u, v] : nho)
        if (mx != v) {dif = 1; break;}
        if (dif) for (auto [u, v] : nho) if (v == mx) cl[u] = 1;
    }
    vector<int> ans;
    for (int i = 0; i < m; i++) if (cl[i]) ans.emplace_back(i);
//    for (int i : ans) cout << i << ' '; cout << "\n";
    return ans;
}
/*
4 6
0 1
0 2
0 3
1 2
1 3
2 3
0 1 5
*/
#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...