Submission #362702

# Submission time Handle Problem Language Result Execution time Memory
362702 2021-02-04T07:15:52 Z sean617 Connecting Supertrees (IOI20_supertrees) C++17
11 / 100
256 ms 23296 KB
#include "supertrees.h"
#include <vector>
#define N 1005

using namespace std;
int n, cnt, bu[N];
bool v[N], co[N][N];
vector<int> gu[N], cy, cy2, ans, ch[N];
vector<std::vector<int> > answer;
int f(int p) {
    if (bu[p] == p) return p;
    else return bu[p] = f(bu[p]);
}

void f_co(int p, int q) {
    co[p][q] = co[q][p] = 1;
}
int construct(std::vector<std::vector<int> > p) {
    int i, j, k, t, t1, t2, la;
	n = p.size();
	for (i = 0; i < n; i++) bu[i] = i;
	for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            if (p[i][j]== 0) continue;
            if (p[i][j] == 3) return 0;
            t1 = f(i);
            t2 = f(j);
            if (t1 != t2) bu[t1] = t2;
        }
	}
	for (i =0; i < n; i++) {
        t = f(i);
        gu[t].push_back(i);
	}
	for (i = 0; i < n; i++) {
        t = f(i);
        if (gu[t].size() == 1) continue;
        for (j = 0; j < gu[t].size(); j++) {
            if (gu[t][j] == i) continue;
            if (p[i][gu[t][j]] != 2) break;
        }
        if (j == gu[t].size()) {
            v[i] = 1;
            cy.push_back(i);
        }
	}
	for (i = 0; i < n; i++) {
        if (v[i]) continue;
        t = f(i);
        if (gu[t].size() == 1) continue;
        for (j = 0; j < gu[t].size(); j++) {
            if (gu[t][j] == i) continue;
            if (p[i][gu[t][j]] == 1 && v[gu[t][j]]) break;
        }
        if (j == gu[t].size()) {
            v[i] = 1;
            cy.push_back(i);
            cy2.push_back(i);
        }
	}
	int sz = cy.size();
	if (sz >= 2) {
        for (i = 0; i < sz; i++) {
            f_co(cy[i], cy[(i + 1) % sz]);
        }
	}
	for (i = 0; i < cy2.size(); i++) {
        la = t = cy2[i];
        t2 = f(t);
        ch[i].push_back(la);
        for (j = 0; j < gu[t2].size(); j++) {
            if (gu[t2][j] != t && p[t][gu[t2][j]] == 1) {
                f_co(la, gu[t2][j]);
                la = gu[t2][j];
                ch[i].push_back(la);
            }
        }
	}
	for (i = 0; i < cy2.size(); i++) {
        for (j = 0; j < ch[i].size(); j++) {
            for (k = j + 1; k < ch[i].size(); k++) {
                if (p[ch[i][j]][ch[i][k]] != 1) return 0;
            }
        }
	}
	for (i = 0; i < n; i++) {
        ans.clear();
        for (j =0; j < n; j++) {
            ans.push_back(co[i][j]);
        }
		answer.push_back(ans);
	}
	build(answer);
	return 1;
}

Compilation message

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:38:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |         for (j = 0; j < gu[t].size(); j++) {
      |                     ~~^~~~~~~~~~~~~~
supertrees.cpp:42:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |         if (j == gu[t].size()) {
      |             ~~^~~~~~~~~~~~~~~
supertrees.cpp:51:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         for (j = 0; j < gu[t].size(); j++) {
      |                     ~~^~~~~~~~~~~~~~
supertrees.cpp:55:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |         if (j == gu[t].size()) {
      |             ~~^~~~~~~~~~~~~~~
supertrees.cpp:67:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |  for (i = 0; i < cy2.size(); i++) {
      |              ~~^~~~~~~~~~~~
supertrees.cpp:71:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |         for (j = 0; j < gu[t2].size(); j++) {
      |                     ~~^~~~~~~~~~~~~~~
supertrees.cpp:79:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |  for (i = 0; i < cy2.size(); i++) {
      |              ~~^~~~~~~~~~~~
supertrees.cpp:80:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |         for (j = 0; j < ch[i].size(); j++) {
      |                     ~~^~~~~~~~~~~~~~
supertrees.cpp:81:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |             for (k = j + 1; k < ch[i].size(); k++) {
      |                             ~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 376 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 0 ms 364 KB Output is correct
6 Correct 11 ms 1516 KB Output is correct
7 Correct 256 ms 23296 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 376 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 0 ms 364 KB Output is correct
6 Correct 11 ms 1516 KB Output is correct
7 Correct 256 ms 23296 KB Output is correct
8 Correct 0 ms 364 KB Output is correct
9 Correct 0 ms 364 KB Output is correct
10 Correct 0 ms 384 KB Output is correct
11 Correct 0 ms 364 KB Output is correct
12 Correct 10 ms 1272 KB Output is correct
13 Correct 248 ms 22124 KB Output is correct
14 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 0 ms 364 KB Output is correct
3 Correct 0 ms 364 KB Output is correct
4 Incorrect 0 ms 364 KB Answer gives possible 1 while actual possible 0
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 0 ms 364 KB Output is correct
3 Correct 0 ms 364 KB Output is correct
4 Incorrect 63 ms 6396 KB Too many ways to get from 0 to 1, should be 0 found no less than 1
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 376 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 0 ms 364 KB Output is correct
6 Correct 11 ms 1516 KB Output is correct
7 Correct 256 ms 23296 KB Output is correct
8 Correct 0 ms 364 KB Output is correct
9 Correct 0 ms 364 KB Output is correct
10 Correct 0 ms 384 KB Output is correct
11 Correct 0 ms 364 KB Output is correct
12 Correct 10 ms 1272 KB Output is correct
13 Correct 248 ms 22124 KB Output is correct
14 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 376 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 0 ms 364 KB Output is correct
6 Correct 11 ms 1516 KB Output is correct
7 Correct 256 ms 23296 KB Output is correct
8 Correct 0 ms 364 KB Output is correct
9 Correct 0 ms 364 KB Output is correct
10 Correct 0 ms 384 KB Output is correct
11 Correct 0 ms 364 KB Output is correct
12 Correct 10 ms 1272 KB Output is correct
13 Correct 248 ms 22124 KB Output is correct
14 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
15 Halted 0 ms 0 KB -