結果

問題 No.1473 おでぶなおばけさん
ユーザー tailstails
提出日時 2021-04-13 22:29:05
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 15 ms / 2,000 ms
コード長 2,499 bytes
コンパイル時間 549 ms
コンパイル使用メモリ 34,164 KB
実行使用メモリ 8,508 KB
最終ジャッジ日時 2023-09-12 13:19:40
合計ジャッジ時間 5,988 ms
ジャッジサーバーID
(参考情報)
judge12 / judge11
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,380 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 AC 12 ms
8,196 KB
testcase_03 AC 8 ms
7,048 KB
testcase_04 AC 7 ms
5,308 KB
testcase_05 AC 3 ms
4,384 KB
testcase_06 AC 9 ms
7,484 KB
testcase_07 AC 13 ms
8,260 KB
testcase_08 AC 14 ms
8,508 KB
testcase_09 AC 13 ms
8,228 KB
testcase_10 AC 6 ms
6,376 KB
testcase_11 AC 6 ms
6,344 KB
testcase_12 AC 6 ms
6,356 KB
testcase_13 AC 4 ms
4,752 KB
testcase_14 AC 3 ms
4,376 KB
testcase_15 AC 6 ms
5,776 KB
testcase_16 AC 5 ms
6,220 KB
testcase_17 AC 1 ms
4,380 KB
testcase_18 AC 2 ms
4,376 KB
testcase_19 AC 5 ms
5,332 KB
testcase_20 AC 7 ms
6,204 KB
testcase_21 AC 8 ms
6,628 KB
testcase_22 AC 11 ms
7,268 KB
testcase_23 AC 10 ms
6,408 KB
testcase_24 AC 9 ms
6,324 KB
testcase_25 AC 12 ms
7,960 KB
testcase_26 AC 10 ms
8,040 KB
testcase_27 AC 4 ms
4,932 KB
testcase_28 AC 11 ms
8,128 KB
testcase_29 AC 7 ms
6,528 KB
testcase_30 AC 8 ms
7,288 KB
testcase_31 AC 15 ms
8,116 KB
testcase_32 AC 9 ms
7,228 KB
testcase_33 AC 8 ms
6,400 KB
testcase_34 AC 6 ms
4,900 KB
testcase_35 AC 5 ms
4,632 KB
testcase_36 AC 8 ms
6,528 KB
testcase_37 AC 9 ms
6,516 KB
testcase_38 AC 2 ms
4,380 KB
testcase_39 AC 6 ms
6,428 KB
testcase_40 AC 6 ms
6,436 KB
testcase_41 AC 6 ms
6,004 KB
testcase_42 AC 5 ms
5,900 KB
testcase_43 AC 7 ms
7,400 KB
testcase_44 AC 7 ms
7,388 KB
testcase_45 AC 7 ms
7,376 KB
testcase_46 AC 9 ms
6,984 KB
testcase_47 AC 11 ms
8,060 KB
testcase_48 AC 10 ms
7,420 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c:95:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int]
   95 | main(){
      | ^~~~
main.c: 関数 ‘main’ 内:
main.c:150:25: 警告: 関数 ‘write’ の暗黙的な宣言です [-Wimplicit-function-declaration]
  150 |                         write(1,wbuf,wp-wbuf);
      |                         ^~~~~
main.c:151:25: 警告: implicit declaration of function ‘_exit’; did you mean ‘_Exit’? [-Wimplicit-function-declaration]
  151 |                         _exit(0);
      |                         ^~~~~
      |                         _Exit

ソースコード

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;}

#define WTHI(v) {long _z=v,_n=0,_d=0;while(++_n,_d=_d<<8|0x30|_z%10,_z/=10);*(long*)wp=_d;wp+=_n;}
#define WTLO(v) {long _z=v,_n=8,_d=0;while(_d=_d<<8|0x30|_z%10,_z/=10,--_n);*(long*)wp=_d;wp+=8;}
#define wt(v) if(v>=100000000){WTHI(v/100000000);WTLO(v);}else{WTHI(v);}

#define rep(v,e) for(int v=0;v<e;++v)

typedef struct {
	int s,t,d;
} Edge;
Edge es[200000];

// sort

void radix_sort_aux(Edge*a,Edge*b,int n){
	int c[256];
	for(int i=0;i<256;++i){
		c[i]=0;
	}
	for(int i=0;i<n;++i){
		++c[a[i].d&255];
	}
	int t=0;
	for(int i=256;i--;){
		int u=c[i];
		c[i]=t;
		t+=u;
	}
	for(int i=0;i<n;++i){
		int j=c[a[i].d&255]++;
		b[j].s=a[i].s;
		b[j].t=a[i].t;
		b[j].d=(unsigned)a[i].d>>8|(unsigned)a[i].d<<24;
	}
}

void radix_sort(Edge*a,int n){
	radix_sort_aux(a,a+n,n);
	radix_sort_aux(a+n,a,n);
	radix_sort_aux(a,a+n,n);
	radix_sort_aux(a+n,a,n);
}

// uf

#define UFSIZE 100000
int ufbuf[UFSIZE];
void uf_init(){
	for(int i=0;i<UFSIZE;++i){
		ufbuf[i]=-1;
	}
}
int uf_root(int a){
	int b;
	int t=a;
	while(b=ufbuf[t],b>=0) t=b;
	while(b=ufbuf[a],b>=0) ufbuf[a]=t,a=b;
	return t;
}
void uf_unite(int a,int b){
	a=uf_root(a);
	b=uf_root(b);
	if(a!=b){
		if(ufbuf[a]<ufbuf[b]){
			ufbuf[a]+=ufbuf[b];
			ufbuf[b]=a;
		}else{
			ufbuf[b]+=ufbuf[a];
			ufbuf[a]=b;
		}
	}
}

// graph

#define MAXN 100000
#define MAXM 200000
int en[MAXN];
int ei[MAXN];
int eb[MAXM];

//

typedef struct {
	int i,l;
} Q;
Q q[100000];
char vis[100000];

main(){
	char*rp=mmap(0l,1l<<28,1,2,0,0ll);
	char wbuf[64],*wp=wbuf;

	rd(n);
	rd(m);
	rep(i,m){
		rd(si); es[i].s=si-1;
		rd(ti); es[i].t=ti-1;
		rd(di); es[i].d=di;
	}
	radix_sort(es,m);
	int k=0;
	uf_init();
	while(uf_root(0)!=uf_root(n-1)){
		uf_unite(es[k].s,es[k].t);
		++k;
	}
	int limd=es[k-1].d;
	wt(limd);
	*wp++=32;
	while(k<m&&es[k].d==limd){
		++k;
	}

	for(int j=0;j<k;++j){
		++en[es[j].s];
		++en[es[j].t];
	}
	{
		int s=0;
		for(int i=0;i<n;++i){
			ei[i]=s;
			s+=en[i];
			en[i]=0;
		}
	}
	for(int j=0;j<k;++j){
		int s=es[j].s;
		int t=es[j].t;
		eb[ei[s]+en[s]++]=t;
		eb[ei[t]+en[t]++]=s;
	}

	int qw=0,qr=0;
	vis[n-1]=1;
	q[qw].i=n-1;
	q[qw].l=0;
	++qw;
	while(1){
		int i=q[qr].i;
		int l=q[qr].l;
		++qr;
		if(i==0){
			wt(l);
			write(1,wbuf,wp-wbuf);
			_exit(0);
		}
		rep(j,en[i]){
			int ii=eb[ei[i]+j];
			if(!vis[ii]){
				vis[ii]=1;
				q[qw].i=ii;
				q[qw].l=l+1;
				++qw;
			}
		}
	}
}
0