제출 #613925

#제출 시각아이디문제언어결과실행 시간메모리
613925Mounir슈퍼트리 잇기 (IOI20_supertrees)C++14
100 / 100
245 ms22388 KiB
#include "supertrees.h" #include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define chmax(x, v) x = max(x, v) #define chmin(x, v) x = min(x, v) #define pb push_back #define pii pair<int, int> #define sz(x) (int)x.size() #define x first #define y second using namespace std; const int N = 2000; bool vu[N]; bool fini[N]; int composante[N], iArbre[N]; int construct(vector<vector<int>> nChemins) { int nNoeuds = sz(nChemins), nCCs = 0; vector<vector<int>> aretes(nNoeuds); for (vector<int>& ligne : aretes){ ligne.resize(nNoeuds); for (int& val : ligne) val = 0; } for (int root = 0; root < nNoeuds; ++root){ if (vu[root]) continue; vector<int> cc; for (int noeud = 0; noeud < nNoeuds; ++noeud){ if (root == noeud || nChemins[noeud][root] > 0){ cc.pb(noeud); composante[noeud] = nCCs; } } vector<int> darons; int nArbres = 0; for (int noeud : cc){ if (fini[noeud]) continue; darons.pb(noeud); for (int autreNoeud : cc){ if (!fini[autreNoeud] && nChemins[autreNoeud][noeud] == 1){ fini[autreNoeud] = true; iArbre[autreNoeud] = nArbres; if (autreNoeud != noeud) aretes[noeud][autreNoeud] = aretes[autreNoeud][noeud] = 1; } } nArbres++; } if (sz(darons) > 1){ for (int i = 0; i < sz(darons); ++i){ int a = darons[i], b = darons[(i + 1)%sz(darons)]; aretes[a][b] = aretes[b][a] = 1; } } if (sz(darons) == 2) return 0; nCCs++; } //verifier que c'est bon bool ok = true; for (int noeud = 0; noeud < nNoeuds; ++noeud) for (int voisin = 0; voisin < nNoeuds; ++voisin){ if (composante[noeud] != composante[voisin]) ok &= (nChemins[noeud][voisin] == 0); else if (iArbre[noeud] == iArbre[voisin]) ok &= (nChemins[noeud][voisin] == 1); else ok &= (nChemins[noeud][voisin] == 2); } if (!ok) return 0; build(aretes); 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...