結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 48ms 21568KB
2 AC 100% 55ms 24768KB
3 AC 100% 28ms 14512KB
4 AC 100% 74ms 30736KB
5 AC 100% 29ms 18464KB
6 AC 100% 60ms 27120KB
7 AC 100% 87ms 32976KB
8 AC 100% 89ms 33760KB
9 AC 100% 25ms 17264KB
10 AC 100% 101ms 40464KB
11 AC 100% 40ms 18640KB
12 AC 100% 14ms 10208KB
13 AC 100% 40ms 19744KB
14 AC 100% 88ms 34480KB
15 AC 100% 80ms 32096KB
16 AC 100% 45ms 25872KB
17 AC 100% 102ms 38912KB
18 AC 100% 62ms 26448KB
19 AC 100% 19ms 13696KB
20 AC 100% 47ms 22304KB
21 AC 100% 18ms 11744KB
22 AC 100% 33ms 17712KB
23 AC 100% 34ms 18192KB
24 AC 100% 139ms 42784KB
25 AC 100% 92ms 36112KB
26 AC 100% 95ms 36448KB
27 AC 100% 23ms 12576KB
28 WA 0% 19ms 10864KB
29 AC 100% 53ms 23360KB
30 WA 0% 43ms 24000KB
31 AC 100% 110ms 42512KB
32 AC 100% 49ms 24176KB
33 AC 100% 13ms 8944KB
34 AC 100% 80ms 32416KB
35 AC 100% 13ms 8144KB
36 AC 100% 82ms 28448KB
37 AC 100% 37ms 17184KB
38 AC 100% 8ms 8064KB
39 AC 100% 97ms 40064KB
40 AC 100% 10ms 9120KB
41 AC 100% 91ms 36144KB
42 AC 100% 26ms 13584KB
43 AC 100% 113ms 42704KB
44 AC 100% 46ms 23184KB
45 AC 100% 72ms 30064KB
46 AC 100% 70ms 27280KB
47 AC 100% 91ms 34688KB
48 AC 100% 97ms 37744KB
49 AC 100% 46ms 21712KB
50 AC 100% 89ms 32416KB
51 AC 100% 15ms 10320KB
52 AC 100% 49ms 20128KB
53 AC 100% 31ms 16016KB
54 AC 100% 53ms 27264KB
55 AC 100% 18ms 11296KB
56 AC 100% 56ms 23776KB
57 AC 100% 37ms 19504KB
58 AC 100% 43ms 19664KB
59 AC 100% 30ms 17568KB
60 AC 100% 27ms 13184KB
61 AC 100% 33ms 18368KB
62 AC 100% 76ms 32000KB
63 WA 0% 74ms 30112KB
64 AC 100% 89ms 35984KB
65 AC 100% 83ms 31360KB
66 AC 100% 3ms 7632KB
67 WA 0% 58ms 27232KB
68 WA 0% 54ms 23728KB
69 AC 100% 151ms 49488KB
70 AC 100% 63ms 24224KB

ソースコード

#include<stdio.h>
int R=1,C=1,H[2000010],N[2000010];
int 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(int 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;
}
int CO[100010];
int 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]=1000000000;
  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;
}