Submission #1232754

#TimeUsernameProblemLanguageResultExecution timeMemory
1232754walizamaneeConnecting Supertrees (IOI20_supertrees)C++20
21 / 100
152 ms22180 KiB
#include<bits/stdc++.h>
#include "supertrees.h"
#include <vector>
using namespace std;
vector<int> one , two;
int ek , dui , uttor , par[10001] , vis[1001];

int construct(vector<vector<int>> p) {
	uttor = 1;
	int n = p.size();
	one.clear();
	two.clear();
	for( int z = 0; z < n; z++ ) {
		ek = 0;
		dui = 0;
		for( int y = 0; y < n; y++ ) {
			if( y != z ) {
				if( p[z][y] == 1 ) ek++;
				else if( p[z][y] == 2 ) dui++;
				else if( p[z][y] == 3 ) uttor = -1;
			}

		}
		if( ek > 0 || dui > 0  ) {
			if( ek > 0 ) one.push_back(z);
			if(dui > 0 ) two.push_back(z);
		} 
	}
	vector<vector<int>> ans;
	for( int z = 0; z < n; z++ ) {
		vector<int> lmao(n , 0);
		ans.push_back(lmao);
	}

	for( int z = 0; z < n; z++ ) {
		par[z] = z;
		vis[z] = 0;
	}
	for( int z = 0; z < (int)one.size(); z++ ) {
		if( vis[one[z]] == 0 ) {
			vis[one[z]] = 1;
			for( int y = 0; y < n; y++ ) {
				if( y != one[z] ) {
					if( p[one[z]][y] == 1 ) {
						vis[y] = 1;
						par[y] = -1;
						ans[one[z]][y] = 1;
						ans[y][one[z]] = 1;
						for( int x = 0; x < n; x++ ) {
							if( x != one[z] && x != y ) {
								if( p[one[z]][x] != p[y][x] ) uttor = -1;
							}
						}
					}
				}
			}
		}
	}

	for( int z = 0; z < dui; z++ ) {
		if( par[two[z]] != -1 && vis[two[z]] != 2 ) {
			int koita = 0;
			int here = two[z];
			vis[here] = 2;
			for( int y = 0; y < n; y++ ) {
				if( p[here][y] == 2 && vis[y] != 2 ) {
					ans[here][y] = 1;
					ans[y][here] = 1;
					for( int x = 0; x < n; x++ ) {
						if( x != here && x != y ) {
							if( min( p[here][x] , p[y][x] ) == 0 && max( p[here][x] , p[y][x] ) > 0 ) {
								uttor = -1;
							}
						}
					}
					here = y;
					vis[here] = 2;
					koita++;
				}
			}
			if( koita < 2 ) uttor = -1;
			ans[here][two[z]] = 1;
			ans[two[z]][here] = 1;
		}
	}

	if( uttor == 1 ) {
	build(ans);
	return 1;
	}
    else return 0;
}
#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...