Submission #733783

#TimeUsernameProblemLanguageResultExecution timeMemory
733783tigarConnecting Supertrees (IOI20_supertrees)C++14
100 / 100
213 ms24176 KiB
#include <bits/stdc++.h> #include "supertrees.h" using namespace std; typedef long long ll; vector<int> jedan[1010], dva[1010], nula[1010]; bool check[1010]; vector<int>lin; vector<int>cc[1010]; int linije[1010], komponente[1010]; int construct(std::vector<std::vector<int>>p) { int n=p.size(); int br=1; for(int i=0; i<n; i++)linije[i]=-1; for(int i=0; i<n; i++) { if(!check[i]) { check[i]=true; lin.push_back(i); linije[i]=i; bool z=false, g=false; for(int j=0; j<n; j++) { if(!z and p[i][j]!=0) { z=true; if(komponente[j]!=0 and komponente[i]==0){komponente[i]=komponente[j];} else if(komponente[j]!=0 and komponente[i]!=0 and komponente[i]!=komponente[j])return 0; else if(komponente[j]==0){komponente[i]=br; g=true; br++;} cc[komponente[i]].push_back(i); } if(p[i][j]==1) { if(linije[j]!=-1 and linije[i]!=linije[j])return 0; linije[j]=i; check[j]=true; if(komponente[j]!=0 and komponente[j]!=komponente[i])return 0; komponente[j]=komponente[i]; jedan[i].push_back(j); } else if(p[i][j]==2) { if(komponente[j]!=0 and komponente[j]!=komponente[i])return 0; if(!g and komponente[j]==0)return 0; komponente[j]=komponente[i]; } else if(p[i][j]==3)return 0; else if(p[i][j]==0) { if(komponente[i]==komponente[j])return 0; if(linije[i]==linije[j])return 0; } } } else { for(int j=0; j<n; j++) { if(p[i][j]!=p[linije[i]][j])return 0; } } } ///ovde pocinje deo za odgovor, njega sredjujem posle vector<vector<int> > ans(n); for(int i=0; i<n; i++){ans[i].resize(n, 0);} for(int i=0; i<lin.size(); i++) { for(int j=1; j<jedan[lin[i]].size(); j++) { ans[jedan[lin[i]][j]][jedan[lin[i]][j-1]]=1; ans[jedan[lin[i]][j-1]][jedan[lin[i]][j]]=1; } } for(int i=1; i<=br; i++) { for(int j=0; j<cc[i].size(); j++) { //cout<<cc[i][j]<<" "; if(cc[i].size()==2)return 0; ans[cc[i][j]][cc[i][(j+1)%cc[i].size()]]=1; ans[cc[i][(j+1)%cc[i].size()]][cc[i][j]]=1; } //cout<<endl; } for(int i=0; i<n; i++) { ans[i][i]=0; } //for(int i=0; i<n; i++){for(int j=0; j<n; j++)cout<<ans[i][j]<<" "; cout<<endl;} build(ans); return 1; } /*int main() { int n; cin>>n; vector<vector<int> >p; for(int i=0; i<n; i++) { vector<int>pp(n); for(int j=0; j<n; j++) { cin>>pp[j]; } p.push_back(pp); } cout<<construct(p); }/*/

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:71:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |     for(int i=0; i<lin.size(); i++)
      |                  ~^~~~~~~~~~~
supertrees.cpp:73:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for(int j=1; j<jedan[lin[i]].size(); j++)
      |                      ~^~~~~~~~~~~~~~~~~~~~~
supertrees.cpp:82:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |         for(int j=0; j<cc[i].size(); j++)
      |                      ~^~~~~~~~~~~~~
#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...