제출 #377347

#제출 시각아이디문제언어결과실행 시간메모리
377347Thistle슈퍼트리 잇기 (IOI20_supertrees)C++14
0 / 100
0 ms256 KiB
#include "supertrees.h"
#include <vector>
#include<algorithm>
#include<set>
using namespace std;
using ll=long long;
using H=pair<ll, ll>;
#define vec vector
#define vi vec<ll>
#define pb push_back
#define all(a) (a).begin(),(a).end()
#define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
#define rep(i,n) rng((i),0,(n))
#define siz(a) int((a).size())

class unionfind{
	int n;
	vi pa,sz;
    public:
	unionfind(int n):n(n){
		pa.resize(n);
		sz.assign(n,1);
		rep(i,n) pa[i]=i;
	}
	int root(int x){
		if(pa[x]==x) return x;
		return pa[x]=root(pa[x]);
	}
	void unite(int x,int y){
		x=root(x);y=root(y);
		if(x==y) return;
		if(sz[x]>sz[y]) swap(x,y);
		sz[y]+=sz[x];
		pa[x]=y;
	}
};

int construct(std::vector<std::vector<int>> p) {
	int n = p.size();

	//hanteiwo suru

	unionfind uf(n);
	rep(i,n)rep(j,n){
		if(p[i][j]==3) return 0;
		if(p[i][j]) uf.unite(i,j); 
	}

	vec<vec<int>>answer(n,vec<int>(n,0));
	vec<bool>used(n,0);
	vec<bool>used2(n,0);
	vi used3(n,-1); int time=0;
	rep(x,n){
		if(used[x]) continue;
		vi v;
		rep(i,n){
			if(p[i][x]) {
				v.pb(i);
				used[i]=1;
			}
		}
		
		vi cic;

		for(auto g:v){
			if(used2[g]) continue;
			vi u;
			for(auto r:v){
				if(p[g][r]==1){
					u.pb(r);
					used2[r]=1;
					used3[r]=time;
				}
			}
			//koitura ha hokani 1 wo motte inaika?
			for(auto g:u){
				rep(i,n){
					if(p[i][g]==1&&used3[i]!=time){
						return 0;
					}
					if(used3[i]==time&&p[i][g]!=1){
						return 0;
					}
				}
			}
			rep(i,siz(u)-1){
				answer[u[i]][u[i+1]]=answer[u[i+1]][u[i]]=1;
			}
			cic.pb(u[0]);
			time++;
		}

		rep(i,siz(cic)-1){
			answer[cic[i]][cic[i+1]]=answer[cic[i+1]][cic[i]]=1;
		}
		answer[cic[0]][cic[siz(cic)-1]]=
			answer[cic[siz(cic)-1]][cic[0]]=1;
	}

	build(answer);

	return 1;
}

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

supertrees.cpp: In constructor 'unionfind::unionfind(int)':
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:23:3: note: in expansion of macro 'rep'
   23 |   rep(i,n) pa[i]=i;
      |   ^~~
supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:44:2: note: in expansion of macro 'rep'
   44 |  rep(i,n)rep(j,n){
      |  ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'j' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:44:10: note: in expansion of macro 'rep'
   44 |  rep(i,n)rep(j,n){
      |          ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'x' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:53:2: note: in expansion of macro 'rep'
   53 |  rep(x,n){
      |  ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:56:3: note: in expansion of macro 'rep'
   56 |   rep(i,n){
      |   ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:77:5: note: in expansion of macro 'rep'
   77 |     rep(i,n){
      |     ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:86:4: note: in expansion of macro 'rep'
   86 |    rep(i,siz(u)-1){
      |    ^~~
supertrees.cpp:12:28: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   12 | #define rng(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
      |                            ^
supertrees.cpp:13:18: note: in expansion of macro 'rng'
   13 | #define rep(i,n) rng((i),0,(n))
      |                  ^~~
supertrees.cpp:93:3: note: in expansion of macro 'rep'
   93 |   rep(i,siz(cic)-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...