제출 #1239463

#제출 시각아이디문제언어결과실행 시간메모리
1239463MuhammadSaram슈퍼트리 잇기 (IOI20_supertrees)C++20
21 / 100
116 ms22196 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; int construct(vector<vector<int>> p) { int n=p.size(); bool vis[n]={}; vector<vector<int>> vv; for (int i=0;i<n;i++) { if (vis[i]) continue; vis[i]=1; vector<int> v1={i}; for (int j=i+1;j<n;j++) if (p[i][j]) v1.push_back(j), vis[j]=1; vv.push_back(v1); } for (int i=0;i<vv.size();i++) for (int j=i;j<vv.size();j++) { for (int x:vv[i]) for (int y:vv[j]) if ((p[x][y]>0)!=(i==j)) return 0; } for (int i=0;i<n;i++) vis[i]=0; vector<vector<int>> ans(n,vector<int>(n)); for (auto v:vv) { int mx=0; for (int i:v) for (int j:v) mx=max(mx,p[i][j]); if (mx==1) { for (int j=0;j+1<v.size();j++) ans[v[j]][v[j+1]]=ans[v[j+1]][v[j]]=1; continue; } else if(mx==3) return 0; vector<vector<int>> v2; for (int i=0;i<v.size();i++) { if (vis[i]) continue; vector<int> v3; for (int j=i;j<(int)v.size();j++) if (p[v[i]][v[j]]==1) v3.push_back(v[j]), vis[j]=1; v2.push_back(v3); } int m=v2.size(); for (int i=0;i<m;i++) for (int j=i;j<m;j++) for (int x:v2[i]) for (int y:v2[j]) if ((i==j)!=(p[x][y]==1)) return 0; if (m<=2) return 0; for (int i=0;i<m;i++) { ans[v2[i][0]][v2[(i+1)%m][0]]=1,ans[v2[(i+1)%m][0]][v2[i][0]]=1; for (int j:v2[i]) ans[v2[i][0]][j]=(j!=v2[i][0]); } } build(ans); 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...