Submission #432099

#TimeUsernameProblemLanguageResultExecution timeMemory
432099Platanito_FritoConnecting Supertrees (IOI20_supertrees)C++17
21 / 100
258 ms22084 KiB
#include<bits/stdc++.h> #include "supertrees.h" #include <vector> #define pb push_back using namespace std; void dfs(int a, int cl, vector<bool>& mk, vector<int>& scc, vector<int> v[], vector<vector<int>>& answer){ mk[a]=true; scc[a]=cl; for(auto b:v[a]){ if(!mk[b]){ answer[a][b]=answer[b][a]=1; dfs(b, cl, mk, scc, v, answer); } } } int construct(std::vector<std::vector<int>> p) { int n = p.size(); vector<int> scc(n), v[n]; vector<bool> mk(n, 0); vector<vector<int>> answer; for (int i = 0; i < n; i++) { std::vector<int> row; row.resize(n); answer.push_back(row); } bool ans=true; for(int i=0; i<n-1; i++){ for(int j=i+1; j<n; j++){ if(i==j) continue; if(p[i][j]==1&&!mk[j]){ v[i].pb(j); v[j].pb(i); mk[j]=true; } } } for(int i=0; i<n; i++) mk[i]=0; int id=0; for(int i=0; i<n; i++){ if(!mk[i]){ dfs(i, id, mk, scc, v, answer); id++; } } for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ if((p[i][j]==1&&scc[i]!=scc[j])||(p[i][j]==0&&scc[i]==scc[j])) ans=false; } } if(ans) build(answer); return ans; }
#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...