結果

提出番号 1947
提出者 T.M
言語 C++
提出日時 2018-08-04 14:41:31
問題名 (73)観光計画
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 52ms 28592KB
2 AC 100% 67ms 33472KB
3 AC 100% 32ms 20240KB
4 AC 100% 81ms 40416KB
5 AC 100% 38ms 23376KB
6 AC 100% 64ms 35168KB
7 AC 100% 99ms 46064KB
8 AC 100% 110ms 47920KB
9 AC 100% 26ms 21248KB
10 AC 100% 105ms 55728KB
11 AC 100% 39ms 24944KB
12 AC 100% 15ms 14256KB
13 AC 100% 44ms 28512KB
14 AC 100% 108ms 46448KB
15 AC 100% 92ms 44880KB
16 AC 100% 61ms 33360KB
17 AC 100% 112ms 54400KB
18 AC 100% 74ms 35712KB
19 AC 100% 20ms 19632KB
20 AC 100% 57ms 31792KB
21 AC 100% 20ms 14160KB
22 AC 100% 43ms 24432KB
23 AC 100% 45ms 25264KB
24 AC 100% 136ms 59712KB
25 AC 100% 103ms 49920KB
26 AC 100% 96ms 49712KB
27 AC 100% 22ms 17216KB
28 WA 0% 19ms 14064KB
29 AC 100% 66ms 30720KB
30 WA 0% 58ms 34480KB
31 AC 100% 126ms 58272KB
32 AC 100% 46ms 31328KB
33 AC 100% 14ms 11792KB
34 AC 100% 106ms 43136KB
35 AC 100% 12ms 10656KB
36 AC 100% 76ms 40368KB
37 AC 100% 36ms 23088KB
38 AC 100% 9ms 8048KB
39 AC 100% 123ms 56208KB
40 AC 100% 12ms 12736KB
41 AC 100% 92ms 48336KB
42 AC 100% 29ms 18288KB
43 AC 100% 127ms 57728KB
44 AC 100% 63ms 31456KB
45 AC 100% 81ms 41712KB
46 AC 100% 61ms 36416KB
47 AC 100% 101ms 46704KB
48 AC 100% 88ms 50208KB
49 AC 100% 52ms 28208KB
50 AC 100% 105ms 45360KB
51 AC 100% 20ms 13104KB
52 AC 100% 50ms 26928KB
53 AC 100% 36ms 21632KB
54 AC 100% 53ms 34832KB
55 AC 100% 21ms 15664KB
56 AC 100% 56ms 34192KB
57 AC 100% 34ms 28512KB
58 AC 100% 48ms 26928KB
59 AC 100% 34ms 24944KB
60 AC 100% 29ms 18336KB
61 AC 100% 39ms 25072KB
62 AC 100% 68ms 42080KB
63 WA 0% 100ms 43152KB
64 AC 100% 86ms 48768KB
65 AC 100% 90ms 42416KB
66 AC 100% 3ms 8464KB
67 WA 0% 70ms 38592KB
68 WA 0% 61ms 34432KB
69 AC 100% 176ms 68512KB
70 AC 100% 63ms 32512KB

ソースコード

#include<stdio.h>
long long R=1,C=1,H[2000010],N[2000010];
long long MAX(int a,int b){return a<b?b:a;}
//評価関数(いまはMIN)
int hyouka(int a,int b){
  if(C<b)return 1;
  if(C<a||b==0)return 0;
  return N[H[a]]<N[H[b]]?1:0;
}
//挿入関数
void hin(long long a){
  int i=C++;
  for(N[H[0]=R]=a;hyouka(0,i/2);i/=2)H[i]=H[i/2];
  H[i]=R++;
}
//取り出す関数
int hout(){
  int rt=H[1],i,j=2,k=H[--C];
  for(i=1;hyouka(i,C);i=j)H[i]=H[j=i*2+1-hyouka(i*2,i*2+1)];
  H[j/2]=k;
  return rt;
}
long long CO[100010];
long long i,id[600010],ta[600010],nt[600010],f[600010]={0};
void dijk(int v,int e,int *fr,int *to,int *co,int mi){
  for(i=0;i<v;i++)ta[i]=-1;
  for(i=0;i<v;i++)CO[i]=1e17;
  for(i=CO[mi]=0;i<e;i++){
    nt[i]=ta[fr[i]];
    ta[fr[i]]=i;
  }
  while(f[mi]-1){
    f[mi]=1;
    for(i=ta[mi];i+1;i=nt[i]){
      if(CO[to[i]]>CO[mi]+co[i])hin(CO[id[R]=to[i]]=CO[mi]+co[i]);
    }
    while(f[mi]&&C-1)mi=id[hout()];
  }
}
int main(){
  int n,m,k,i,a[600010],b[600010],c[600010],e[100010],f[100010],max=0;
  scanf("%d %d %d",&n,&m,&k);
  for(i=0;i<m;i++)scanf("%d %d %d",&a[i],&b[i],&c[i]);
  for(i=0;i<k;i++){
    scanf("%d %d",&e[i],&f[i]);
    max=MAX(max,f[i]);
  }
  for(i=0;i<k;i++){
    a[i+m]=0;
    b[i+m]=e[i];
    c[i+m]=max-f[i];
  }
  for(i=0;i<m+k;i++){
    a[i+m+k]=b[i];
    b[i+m+k]=a[i];
    c[i+m+k]=c[i];
  }
  dijk(n+1,m+k+m+k,a,b,c,0);
  for(i=k=0;i<n;i++){
    if(CO[i+1]<max)k++;
  }
  printf("%d\n",k);
  return 0;
}