結果
問題 | No.1639 最小通信路 |
ユーザー | 👑Zack Ni |
提出日時 | 2021-08-06 22:29:31 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 8 ms / 2,000 ms |
コード長 | 6,633 bytes |
コンパイル時間 | 2,163 ms |
コンパイル使用メモリ | 183,828 KB |
実行使用メモリ | 13,036 KB |
最終ジャッジ日時 | 2024-09-17 02:33:25 |
合計ジャッジ時間 | 3,583 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 4 ms
6,912 KB |
testcase_01 | AC | 5 ms
6,912 KB |
testcase_02 | AC | 5 ms
7,040 KB |
testcase_03 | AC | 7 ms
7,936 KB |
testcase_04 | AC | 8 ms
7,936 KB |
testcase_05 | AC | 4 ms
6,912 KB |
testcase_06 | AC | 4 ms
7,040 KB |
testcase_07 | AC | 5 ms
7,168 KB |
testcase_08 | AC | 5 ms
6,912 KB |
testcase_09 | AC | 4 ms
7,040 KB |
testcase_10 | AC | 4 ms
9,028 KB |
testcase_11 | AC | 5 ms
11,092 KB |
testcase_12 | AC | 4 ms
9,840 KB |
testcase_13 | AC | 4 ms
9,668 KB |
testcase_14 | AC | 5 ms
9,668 KB |
testcase_15 | AC | 5 ms
12,676 KB |
testcase_16 | AC | 5 ms
9,696 KB |
testcase_17 | AC | 5 ms
10,904 KB |
testcase_18 | AC | 4 ms
9,128 KB |
testcase_19 | AC | 5 ms
10,980 KB |
testcase_20 | AC | 5 ms
12,280 KB |
testcase_21 | AC | 4 ms
9,036 KB |
testcase_22 | AC | 4 ms
9,664 KB |
testcase_23 | AC | 4 ms
9,016 KB |
testcase_24 | AC | 5 ms
10,128 KB |
testcase_25 | AC | 5 ms
9,748 KB |
testcase_26 | AC | 5 ms
12,532 KB |
testcase_27 | AC | 5 ms
10,940 KB |
testcase_28 | AC | 4 ms
9,668 KB |
testcase_29 | AC | 6 ms
13,036 KB |
testcase_30 | AC | 6 ms
9,680 KB |
testcase_31 | AC | 5 ms
9,668 KB |
testcase_32 | AC | 6 ms
9,924 KB |
testcase_33 | AC | 5 ms
12,332 KB |
testcase_34 | AC | 5 ms
10,192 KB |
testcase_35 | AC | 7 ms
10,440 KB |
testcase_36 | AC | 6 ms
12,240 KB |
testcase_37 | AC | 5 ms
10,052 KB |
testcase_38 | AC | 5 ms
9,372 KB |
testcase_39 | AC | 5 ms
9,664 KB |
testcase_40 | AC | 5 ms
10,036 KB |
testcase_41 | AC | 4 ms
9,752 KB |
testcase_42 | AC | 6 ms
9,552 KB |
testcase_43 | AC | 6 ms
12,036 KB |
testcase_44 | AC | 5 ms
12,416 KB |
ソースコード
#pragma GCC optimize ("Ofast") #include<bits/stdc++.h> using namespace std; void*wmem; char memarr[96000000]; template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){ static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] ); (*arr)=(T*)(*mem); (*mem)=((*arr)+x); } template<class T> inline void walloc1d(T **arr, int x1, int x2, void **mem = &wmem){ walloc1d(arr, x2-x1, mem); (*arr) -= x1; } inline int my_getchar(){ static char buf[1048576]; static int s = 1048576; static int e = 1048576; if(s == e && e == 1048576){ e = fread(buf, 1, 1048576, stdin); s = 0; } if(s == e){ return EOF; } return buf[s++]; } inline void rd(int &x){ int k; int m=0; x=0; for(;;){ k = my_getchar(); if(k=='-'){ m=1; break; } if('0'<=k&&k<='9'){ x=k-'0'; break; } } for(;;){ k = my_getchar(); if(k<'0'||k>'9'){ break; } x=x*10+k-'0'; } if(m){ x=-x; } } inline int rd(char c[]){ int i; int sz = 0; for(;;){ i = my_getchar(); if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){ break; } } c[sz++] = i; for(;;){ i = my_getchar(); if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){ break; } c[sz++] = i; } c[sz]='\0'; return sz; } inline void rd(string &x){ char*buf = (char *)wmem; rd(buf); x = buf; } struct MY_WRITER{ char buf[1048576]; int s; int e; MY_WRITER(){ s = 0; e = 1048576; } ~MY_WRITER(){ if(s){ fwrite(buf, 1, s, stdout); } } } ; MY_WRITER MY_WRITER_VAR; void my_putchar(int a){ if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){ fwrite(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout); MY_WRITER_VAR.s = 0; } MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a; } inline void wt_L(char a){ my_putchar(a); } inline void wt_L(const char c[]){ int i=0; for(i=0;c[i]!='\0';i++){ my_putchar(c[i]); } } inline void wt_L(string &x){ int i=0; for(i=0;x[i]!='\0';i++){ my_putchar(x[i]); } } template<class S> inline void arrInsert(const int k, int &sz, S a[], const S aval){ int i; sz++; for(i=sz-1;i>k;i--){ a[i] = a[i-1]; } a[k] = aval; } template<class S, class T> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval){ int i; sz++; for(i=sz-1;i>k;i--){ a[i] = a[i-1]; } for(i=sz-1;i>k;i--){ b[i] = b[i-1]; } a[k] = aval; b[k] = bval; } template<class S, class T, class U> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){ int i; sz++; for(i=sz-1;i>k;i--){ a[i] = a[i-1]; } for(i=sz-1;i>k;i--){ b[i] = b[i-1]; } for(i=sz-1;i>k;i--){ c[i] = c[i-1]; } a[k] = aval; b[k] = bval; c[k] = cval; } template<class S, class T, class U, class V> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval, V d[], const V dval){ int i; sz++; for(i=sz-1;i>k;i--){ a[i] = a[i-1]; } for(i=sz-1;i>k;i--){ b[i] = b[i-1]; } for(i=sz-1;i>k;i--){ c[i] = c[i-1]; } for(i=sz-1;i>k;i--){ d[i] = d[i-1]; } a[k] = aval; b[k] = bval; c[k] = cval; d[k] = dval; } struct unionFind{ int*d; int N; int M; inline void malloc(const int n){ d = (int*)std::malloc(n*sizeof(int)); M = n; } inline void malloc(const int n, const int fg){ d = (int*)std::malloc(n*sizeof(int)); M = n; if(fg){ init(n); } } inline void free(void){ std::free(d); } inline void walloc(const int n, void **mem=&wmem){ walloc1d(&d, n, mem); M = n; } inline void walloc(const int n, const int fg, void **mem=&wmem){ walloc1d(&d, n, mem); M = n; if(fg){ init(n); } } inline void init(const int n){ int i; N = n; for(i=(0);i<(n);i++){ d[i] = -1; } } inline void init(void){ init(M); } inline int get(int a){ int t = a; int k; while(d[t]>=0){ t=d[t]; } while(d[a]>=0){ k=d[a]; d[a]=t; a=k; } return a; } inline int connect(int a, int b){ if(d[a]>=0){ a=get(a); } if(d[b]>=0){ b=get(b); } if(a==b){ return 0; } if(d[a] < d[b]){ d[a] += d[b]; d[b] = a; } else{ d[b] += d[a]; d[a] = b; } return 1; } inline int operator()(int a){ return get(a); } inline int operator()(int a, int b){ return connect(a,b); } inline int& operator[](const int a){ return d[a]; } inline int size(int a){ a = get(a); return -d[a]; } inline int sizeList(int res[]){ int i; int sz=0; for(i=(0);i<(N);i++){ if(d[i]<0){ res[sz++] = -d[i]; } } return sz; } } ; int N; int A[100000]; int B[100000]; int esz; string C[100000]; int idx[100000]; void add_edge(int x, int y, string & z){ arrInsert(esz, esz, A, x, B, y, C, z); } unionFind dsu; int main(){ int djQeACzd, i; wmem = memarr; dsu.walloc(100000); dsu.init(100000); rd(N); for(i=(0);i<(N*(N-1)/2);i++){ int a; int b; string c; rd(a); rd(b); rd(c); --a; --b; add_edge(a,b, c); } for(i=(0);i<(esz);i++){ idx[i] = i; } sort(idx, idx+ esz, [&] (const int & a, const int & b){ if(C[a].length() != C[b].length()){ return C[a].length() < C[b].length(); } return a < b; } ); int ans = 0; for(djQeACzd=(0);djQeACzd<(esz);djQeACzd++){ auto&i = idx[djQeACzd]; if(dsu(A[i]) == dsu(B[i])){ continue; } ans = i; dsu(A[i], B[i]); } wt_L(C[ans]); wt_L('\n'); return 0; } // cLay version 20210405-1 // --- original code --- // //no-unlocked // int N; // int A[1d5], B[], esz; // string C[]; // int idx[]; // void add_edge(int x, int y, string & z){ // arrInsert(esz, esz, A, x, B, y, C, z); // } // unionFind dsu; // // { // dsu.walloc(1d5); // dsu.init(1d5); // rd(N); // rep(i, N*(N-1)/2){ // int a, b; // string c; // rd(a, b, c); // --a; --b; // add_edge(a,b, c); // } // rep(i, esz) idx[i] = i; // sort(idx, idx+ esz, [&] (const int & a, const int & b){ // if(C[a].length() != C[b].length()){ // return C[a].length() < C[b].length(); // } // return a < b; // } ); // int ans = 0; // rep[idx](i, esz){ // if(dsu(A[i]) == dsu(B[i])) continue; // ans = i; // dsu(A[i], B[i]); // } // wt(C[ans]); // }