結果

問題 No.1153 ねこちゃんゲーム
ユーザー tails
提出日時 2020-11-04 00:27:58
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 94 ms / 2,500 ms
コード長 1,387 bytes
コンパイル時間 519 ms
コンパイル使用メモリ 35,796 KB
実行使用メモリ 28,288 KB
最終ジャッジ日時 2024-07-22 09:25:44
合計ジャッジ時間 15,610 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 40
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c:62:1: warning: return type defaults to 'int' [-Wimplicit-int]
   62 | main(){
      | ^~~~
main.c: In function 'main':
main.c:99:9: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
   99 |         printf("%d %d\n",zi[g],zv[g]);
      |         ^~~~~~
main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf'
  +++ |+#include <stdio.h>
    1 | #pragma GCC optimize("Ofast")
main.c:99:9: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch]
   99 |         printf("%d %d\n",zi[g],zv[g]);
      |         ^~~~~~
main.c:99:9: note: include '<stdio.h>' or provide a declaration of 'printf'

ソースコード

diff #

#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")

char*mmap();
#define RD(v) int v=0;{int c;while(c=*rp++-48,c>=0)v=v*10+c;}

int a[200001];
int ar[200001];

int en[200001];
int ei[200001];
int eb[400000];
int uv[400000];

int gn[200001];
int gb1[200001];
int gb2[200001];
int zi[32],zv[32];

void f1(int i,int p){
	int b1=0;
	int b2=0;
	for(int k=0;k<en[i];++k){
		int j=eb[ei[i]+k];
		if(j!=p){
			f1(j,i);
			int g=1<<gn[j];
			b2|=b1&g;
			b1|=g;
		}
	}
	gb1[i]=b1;
	gb2[i]=b2;
	gn[i]=__builtin_ctz(~b1);
}

void f2(int i,int p){
	int gi=gn[i];
	int gp=gn[p];
	gp=gb2[p]&1<<gi||gp<gi?gp:gi;
	int bp=1<<gp;
	gb2[i]|=gb1[i]&bp;
	gb1[i]|=bp;
	gn[i]=gi=__builtin_ctz(~gb1[i]);
	if(ar[i]){
		zi[gp^gi]=ar[i];
		zv[gp^gi]=p;
	}
	for(int k=0;k<en[i];++k){
		int j=eb[ei[i]+k];
		int gj=gn[j];
		if(j!=p){
			if(ar[i]){
				zi[gj^gi]=ar[i];
				zv[gj^gi]=j;
			}
			f2(j,i);
		}
	}
}

main(){
	char*rp=mmap(0l,7*600002,1,2,0,0ll);
	RD(n);
	RD(m);
	for(int l=0;++l<=m;){
		RD(t);
		a[l]=t;
		ar[t]=l;
	}
	for(int j=0;j<n-1<<1;++j){
		RD(t);
		uv[j]=t;
		++en[uv[j]];
	}
	{
		int s=0;
		for(int i=0;++i<=n;){
			ei[i]=s;
			s+=en[i];
			en[i]=0;
		}
	}
	for(int j=0;j<n-1<<1;++j){
		int i=uv[j];
		eb[ei[i]+en[i]++]=uv[j^1];
	}

	gn[0]=31;
	gb2[0]=-1;
	zi[0]=zv[0]=-1;
	f1(1,0);
	f2(1,0);
	int g=0;
	for(int l=0;++l<=m;){
		int i=a[l];
		g^=gn[i];
	}
	printf("%d %d\n",zi[g],zv[g]);
}
0