Submission #303630

#TimeUsernameProblemLanguageResultExecution timeMemory
303630nicolaalexandraConnecting Supertrees (IOI20_supertrees)C++14
100 / 100
262 ms26236 KiB
#include <bits/stdc++.h> #include "supertrees.h" #define DIM 1010 using namespace std; int t[DIM],t2[DIM],a[DIM][DIM],f[DIM],last[DIM]; vector <int> v[DIM],w; /*void build (vector <vector <int> > a){ int n = a.size(); for (int i=0;i<n;i++,cout<<"\n") for (int j=0;j<n;j++) cout<<a[i][j]<<" "; }*/ int get_rad (int t[], int x){ while (t[x] > 0) x = t[x]; return x; } void uneste (int t[], int x, int y){ int radx = get_rad (t,x), rady = get_rad (t,y); if (radx == rady) return; if (t[radx] > t[rady]) swap (radx,rady); t[radx] += t[rady]; t[rady] = radx; } int construct (vector <vector<int> > p){ int n = p.size(); memset (t,-1,sizeof t); memset (f,0,sizeof f); for (int i=1;i<=n;i++) v[i].clear(); int ok = 0; for (int i=0;i<n;i++) for (int j=i+1;j<n;j++) if (p[i][j]){ uneste (t,i+1,j+1); if (p[i][j] == 3) ok = 1; } if (ok) return 0; int nr_comp = 0; for (int i=1;i<=n;i++){ int rad = get_rad (t,i); if (!f[rad]) f[rad] = ++nr_comp; /// mai verific daca e conectat cu toate nodurile din componenta for (auto it : v[f[rad]]){ if (p[it-1][i-1] == 0) return 0; } v[f[rad]].push_back(i); } for (int i=1;i<=nr_comp;i++){ /// fac iar paduri cu nodurile din multimea asta memset (t2,-1,sizeof t2); memset (last,0,sizeof last); for (auto it : v[i]){ for (auto it2 : v[i]){ if (it != it2 && p[it-1][it2-1] == 1) uneste (t2,it,it2); }} w.clear(); for (auto it : v[i]){ int rad = get_rad (t2,it); if (t2[rad] == -1){ w.push_back(it); continue; } if (!last[rad]){ last[rad] = it; w.push_back(it); } else { a[last[rad]][it] = a[it][last[rad]] = 1; last[rad] = it; } } if (w.size() == 2) return 0; for (int j=0;j<w.size()-1;j++) a[w[j]][w[j+1]] = a[w[j+1]][w[j]] = 1; if (w.size() > 1) a[w[0]][ w[w.size()-1] ] = a[ w[w.size()-1] ][w[0]] = 1; } vector <vector<int> > ans; for (int i=1;i<=n;i++){ vector <int> lin; for (int j=1;j<=n;j++) lin.push_back(a[i][j]); ans.push_back (lin); } build (ans); return 1; }

Compilation message (stderr)

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:102:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |         for (int j=0;j<w.size()-1;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...