# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
732753 | 2023-04-29T09:02:07 Z | raul2008487 | 슈퍼트리 잇기 (IOI20_supertrees) | C++17 | 0 ms | 0 KB |
#include "supertrees.h" #include<algorithm> #include <vector> std::vector<std::vector<int>> ans; std::vector<bool> vis; void dfs(int i, int j){ vis[j]=1; for(int k1=0;k1<n;k1++){ if(p[j][k1] && !vis[k1]){ ans[j][k1]=ans[k1][j]=1; dfs(j,k1); } } } int construct(std::vector<std::vector<int>> p) { int n = p.size(); vis.resize(n,false); for(int i=0;i<n;i++){ std::vector<int> row; row.resize(n,0); ans.push_back(row); } for (int i = 0; i < n; i++) { if(!vis[i]){ vis[i]=1; for(int j=i+1;j<n;j++){ if(p[i][j] && !vis[j]){ ans[i][j]=ans[j][i]=1; dfs(i,j); } } } } build(ans); return 1; }