제출 #1235867

#제출 시각아이디문제언어결과실행 시간메모리
1235867stanirinaConnecting Supertrees (IOI20_supertrees)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; vector<vector<int>> g1; vector<vector<int>> g2; vector<bool> vis; vector<int> col; vector<vector<int>> cmp; vector<vector<int>> cmp2; vector<bool> pravicvor; void dfs(int c,int color){ if(vis[c])return; col[c]=color; vis[c]=true; for(auto a:g1[c]){ if(vis[a])continue; dfs(a,color); } } void dfs2(int c,int color){ if(vis[c])return; col[c]=color; vis[c]=true; for(auto a:g2[c]){ if(vis[a])continue; dfs2(a,color); } } void build(vector<vector<int>> ans){ int n=ans.size(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++)cout<<ans[i][j]<<' '; cout<<endl; } } int construct(vector<vector<int>> p) { int n = p.size(); vector<vector<int>> ans(n); for(int i=0;i<n;i++)ans[i].assign(n,0); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(p[i][j]==3)return 0; } } //cout<<"PRVA PROVERA"<<endl; g1.resize(n); for(int i=0;i<n;i++)g1[i].clear(); vis.assign(n,false); col.assign(n,-1); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j)continue; if(p[i][j]==1)g1[i].push_back(j); } } for(int i=0;i<n;i++){ if(col[i]!=-1)continue; vis.assign(n,false); dfs(i,i); } cmp.resize(n); for(int i=0;i<n;i++)cmp[i].clear(); for(int i=0;i<n;i++)cmp[col[i]].push_back(i); for(int i=0;i<n;i++){ //provera za jedinice for(int j=0;j<cmp[i].size();j++){ for(int k=j+1;k<cmp[i].size();k++){ if(p[cmp[i][j]][cmp[i][k]]!=1)return 0; } } } //cout<<"DRUGA PROVERA"<<endl; for(int i=0;i<n;i++){ //provera za jedinice for(int j=1;j<cmp[i].size();j++){ for(int k=0;k<n;k++){ if(k==cmp[i][0] || k==cmp[i][j])continue; if(p[cmp[i][0]][k]!=p[cmp[i][j]][k])return 0; } } } //cout<<"TRECA PROVERA"<<endl; pravicvor.assign(n,false); //poslednji deo drugog koraka for(int i=0;i<n;i++){ if(cmp[i].size()==0)continue; pravicvor[cmp[i][0]]=true; for(int j=1;j<cmp[i].size();j++){ ans[ cmp[i][0] ][ cmp[i][j] ]=1; ans[ cmp[i][j] ][ cmp[i][0] ]=1; } } ///TRECI KORAK //cout<<"TRECI KORAK"<<endl; g2.resize(n); for(int i=0;i<n;i++)g2[i].clear(); vis.assign(n,false); col.assign(n,-1); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(!pravicvor[i])continue; if(!pravicvor[j])continue; if(p[i][j]==2)g2[i].push_back(j); } } for(int i=0;i<n;i++){ if(col[i]!=-1)continue; if(!pravicvor[i])continue; vis.assign(n,false); dfs2(i,i); } //cout<<"ZAVRSEN DFS"<<endl; cmp2.resize(n); for(int i=0;i<n;i++)cmp2[i].clear(); for(int i=0;i<n;i++){ if(col[i]==-1 || !pravicvor[i])continue; cmp2[col[i]].push_back(i); } for(int i=0;i<n;i++){ if(cmp2[i].size()==0 || cmp2[i].size()==1)continue; if(cmp2[i].size()<3)return 0; for(int j=0;j<cmp2[i].size()-1;j++){ ans[ cmp2[i][j+1] ][ cmp2[i][j] ]=1; ans[ cmp2[i][j] ][ cmp2[i][j+1] ]=1; } ans[ cmp2[i][0] ][ cmp2[i][cmp2[i].size()-1] ]=1; ans[ cmp2[i][cmp2[i].size()-1] ][ cmp2[i][0] ]=1; } //cout<<"CETVRTA PROVERA"<<endl; build(ans); return 1; }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cc6jgvJG.o: in function `build(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)':
grader.cpp:(.text+0x220): multiple definition of `build(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)'; /tmp/ccDcNohv.o:supertrees.cpp:(.text+0x1e0): first defined here
collect2: error: ld returned 1 exit status