제출 #756330

#제출 시각아이디문제언어결과실행 시간메모리
756330Trumling슈퍼트리 잇기 (IOI20_supertrees)C++14
21 / 100
249 ms25996 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std; 

typedef long long ll;
#define pb push_back
#define F first
#define S second
#define enter cout<<'\n';
#define INF 99999999999999999
#define MOD 1000000007
#define all(x) x.begin(),x.end()

vector<bool>vis(1000,0);
vector<bool>vis2(1000,0);

vector<vector<int>>g;
vector<vector<int>>ans;
ll nn;

bool dfs1(int start,int beg)
{
	vis[start]=1;
	for(int i=0;i<nn;i++)
		if(g[start][i]!=g[beg][i] && i!=start && i!=beg)
			return 0;

	for(int i=0;i<nn;i++)
		if(!vis[i] && g[start][i]==1)
		{
			ans[i][start]=1;
			ans[start][i]=1;
			return dfs1(i,beg);
		}

	vis[beg]=0;

	return 1;
}

bool dfs2(int start,int beg)
{
	vis[start]=1;

	for(int i=0;i<nn;i++)
	{
		if(g[start][i]==g[beg][i])
		continue;

		if(g[start][i]==1 && g[beg][i]==1)
		return 0;

		if(g[start][i]==2 && g[beg][i]==0 || g[start][i]==0 && g[beg][i]==2)
		return 0;

		if(g[start][i]==1 && g[beg][i]==0 || g[start][i]==0 && g[beg][i]==1)
		return 0;

	}
		
		

	ll count=0;
	for(int i=0;i<nn;i++)
		if(g[start][i]==2 && !vis[i])
		count++;

	if(count==1)
	return 0;

	for(int i=0;i<nn;i++)
		if(!vis[i] && g[start][i]==2)
		{
			ans[i][start]=1;
			ans[start][i]=1;

			return dfs2(i,beg);
		}
	ans[start][beg]=1;
	ans[beg][start]=1;
	return 1;
}

int construct(vector<vector<int>> pr) 
{
	nn=pr.size();
	g=pr;

	ans.assign(nn,vector<int>(nn,0));

	for(int i=0;i<nn;i++)
	{
		bool now=dfs1(i,i);
		if(!now)
		return 0;
	}

	for(int i=0;i<nn;i++)
	{
		if(vis[i])
		continue;

		bool now=dfs2(i,i);
		if(!now)
		return 0;
	}

	for(int i=0;i<nn;i++)
	ans[i][i]=0;

	build(ans);
	return 1;

}

컴파일 시 표준 에러 (stderr) 메시지

supertrees.cpp: In function 'bool dfs2(int, int)':
supertrees.cpp:53:21: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   53 |   if(g[start][i]==2 && g[beg][i]==0 || g[start][i]==0 && g[beg][i]==2)
supertrees.cpp:56:21: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   56 |   if(g[start][i]==1 && g[beg][i]==0 || g[start][i]==0 && g[beg][i]==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...