Submission #1202950

#TimeUsernameProblemLanguageResultExecution timeMemory
1202950notme슈퍼트리 잇기 (IOI20_supertrees)C++20
21 / 100
128 ms30136 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
#include <vector>
#define pb push_back
using namespace std;
const int maxn = 1e3 + 10;
vector < int > initg[maxn];
int initc[maxn], currc;
vector < int > path;
void dfs(int beg)
{
    path.pb(beg);
    initc[beg] = currc;
    for (auto nb: initg[beg])
        if(!initc[nb])dfs(nb);
}
int construct(std::vector<std::vector<int>> p)
{
	int n = p.size();
	std::vector<std::vector<int>> answer;
	for (int i = 0; i < n; ++ i)
    {
        std::vector<int> row;
		row.resize(n);
		answer.push_back(row);
    }
    vector < pair < int, int > > initp;
	for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; ++ j)
        {
            if(p[i][j])
            {
                initg[i].pb(j);
                initg[j].pb(i);
            }
            else initp.pb(make_pair(i, j));
        }

	}
	for (int i = 0; i < n; ++ i)
	{
	    if(initc[i])continue;
	    path.clear();
	    currc ++;
	    dfs(i);
	    int lastv = -1;
	    for (auto v: path)
        {
            if(lastv == -1)
            {
                lastv = v;
                continue;
            }
            answer[lastv][v] = 1;
            answer[v][lastv] = 1;
        }
	}
	for (auto &[x, y]: initp)
        if(initc[x] == initc[y])return 0;

	build(answer);
	return 1;
}
#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...