結果
| 問題 |
No.416 旅行会社
|
| コンテスト | |
| ユーザー |
tails
|
| 提出日時 | 2020-11-05 22:31:13 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 71 ms / 4,000 ms |
| コード長 | 1,477 bytes |
| コンパイル時間 | 1,041 ms |
| コンパイル使用メモリ | 56,320 KB |
| 実行使用メモリ | 14,336 KB |
| 最終ジャッジ日時 | 2024-12-14 21:00:06 |
| 合計ジャッジ時間 | 3,044 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 |
ソースコード
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <algorithm>
#define RD(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;}
long ab[200000];
long cd[200000];
char xx[200000];
int en[100001];
int ei[100001];
int eb[400000];
long wbuf[100001];
long d;
void f(int i){
if(!wbuf[i]){
wbuf[i]=d;
for(int k=0;k<en[i];++k){
f(eb[ei[i]+k]);
}
}
}
int main(){
char*rp=static_cast<char*>(mmap(0l,7l*800005,1,2,0,0ll));
RD(n);
RD(m);
RD(q);
for(int i=0;i<m;++i){
RD(a);
RD(b);
ab[i]=(long)a<<32|b;
++en[a];
++en[b];
}
{
int s=0;
for(int i=0;++i<=n;){
ei[i]=s;
s+=en[i];
en[i]=0;
}
}
std::sort(ab,ab+m);
for(int i=0;i<q;++i){
RD(c);
RD(d);
cd[i]=(long)c<<32|d;
xx[std::lower_bound(ab,ab+m,cd[i])-ab]=1;
}
for(int i=0;i<m;++i){
if(!xx[i]){
int a=ab[i]>>32;
int b=ab[i];
eb[ei[a]+en[a]++]=b;
eb[ei[b]+en[b]++]=a;
}
}
d=-1;
f(1);
for(int i=q;i--;){
d=i+1;
int a=cd[i]>>32;
int b=cd[i];
if(wbuf[a]) f(b);
if(wbuf[b]) f(a);
eb[ei[a]+en[a]++]=b;
eb[ei[b]+en[b]++]=a;
}
for(int i=2;i<=n;++i){
int z=wbuf[i];
wbuf[i]=
z<0?0x0a2020202020312dl:
(z>=100000?z/100000%10+48l:32l)<< 0|
(z>= 10000?z/ 10000%10+48l:32l)<< 8|
(z>= 1000?z/ 1000%10+48l:32l)<<16|
(z>= 100?z/ 100%10+48l:32l)<<24|
(z>= 10?z/ 10%10+48l:32l)<<32|
z%10+0x0a2030l<<40;
}
write(1,wbuf+2,(n-1)*8);
_exit(0);
}
tails