結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 53ms 28592KB
2 AC 100% 67ms 33440KB
3 AC 100% 30ms 20288KB
4 AC 100% 80ms 40400KB
5 AC 100% 30ms 23376KB
6 AC 100% 52ms 35152KB
7 AC 100% 100ms 46048KB
8 AC 100% 102ms 47920KB
9 AC 100% 30ms 21264KB
10 AC 100% 138ms 55712KB
11 AC 100% 38ms 24912KB
12 AC 100% 16ms 14256KB
13 AC 100% 47ms 28496KB
14 AC 100% 99ms 46496KB
15 AC 100% 90ms 44896KB
16 AC 100% 62ms 33344KB
17 AC 100% 114ms 54432KB
18 AC 100% 56ms 35712KB
19 AC 100% 19ms 19616KB
20 AC 100% 57ms 31808KB
21 AC 100% 21ms 14176KB
22 AC 100% 39ms 24432KB
23 AC 100% 39ms 25296KB
24 AC 100% 146ms 59696KB
25 AC 100% 103ms 49904KB
26 AC 100% 107ms 49696KB
27 AC 100% 29ms 17264KB
28 WA 0% 22ms 14064KB
29 AC 100% 55ms 30720KB
30 WA 0% 49ms 34480KB
31 AC 100% 127ms 58224KB
32 AC 100% 58ms 31344KB
33 AC 100% 15ms 11824KB
34 AC 100% 73ms 43200KB
35 AC 100% 14ms 10640KB
36 AC 100% 89ms 40352KB
37 AC 100% 33ms 23056KB
38 AC 100% 8ms 8720KB
39 AC 100% 129ms 56208KB
40 AC 100% 12ms 12720KB
41 AC 100% 100ms 48288KB
42 AC 100% 30ms 18288KB
43 AC 100% 123ms 57744KB
44 AC 100% 64ms 31456KB
45 AC 100% 84ms 41648KB
46 AC 100% 59ms 36448KB
47 AC 100% 97ms 46704KB
48 AC 100% 105ms 50240KB
49 AC 100% 52ms 28192KB
50 AC 100% 102ms 45312KB
51 AC 100% 20ms 13120KB
52 AC 100% 42ms 26896KB
53 AC 100% 37ms 21632KB
54 AC 100% 57ms 34832KB
55 AC 100% 21ms 15648KB
56 AC 100% 66ms 34128KB
57 AC 100% 43ms 28512KB
58 AC 100% 49ms 26912KB
59 AC 100% 37ms 24944KB
60 AC 100% 24ms 18336KB
61 AC 100% 42ms 25056KB
62 AC 100% 77ms 42064KB
63 WA 0% 86ms 43152KB
64 AC 100% 103ms 48768KB
65 AC 100% 89ms 42400KB
66 AC 100% 3ms 8720KB
67 WA 0% 70ms 38576KB
68 WA 0% 63ms 34480KB
69 AC 100% 157ms 68512KB
70 AC 100% 53ms 32432KB

ソースコード

#include<stdio.h>
long long R=1,C=1,H[2000010],N[2000010];
long long MAX(long long a,long long 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;
}