結果

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

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 54ms 28576KB
2 AC 100% 67ms 33472KB
3 AC 100% 35ms 20256KB
4 AC 100% 79ms 40416KB
5 AC 100% 37ms 23392KB
6 AC 100% 66ms 35184KB
7 AC 100% 85ms 46064KB
8 AC 100% 110ms 47936KB
9 AC 100% 33ms 21248KB
10 AC 100% 132ms 55696KB
11 AC 100% 39ms 24960KB
12 AC 100% 13ms 14272KB
13 AC 100% 51ms 28480KB
14 AC 100% 98ms 46496KB
15 AC 100% 101ms 44912KB
16 AC 100% 61ms 33360KB
17 AC 100% 108ms 54416KB
18 AC 100% 70ms 35696KB
19 AC 100% 23ms 19584KB
20 AC 100% 47ms 31792KB
21 AC 100% 21ms 14160KB
22 AC 100% 46ms 24448KB
23 AC 100% 48ms 25280KB
24 AC 100% 143ms 59712KB
25 AC 100% 104ms 49920KB
26 AC 100% 115ms 49680KB
27 AC 100% 26ms 17216KB
28 WA 0% 22ms 14032KB
29 AC 100% 59ms 30736KB
30 WA 0% 61ms 34480KB
31 AC 100% 128ms 58240KB
32 AC 100% 46ms 31328KB
33 AC 100% 16ms 11824KB
34 AC 100% 88ms 43152KB
35 AC 100% 14ms 10640KB
36 AC 100% 89ms 40352KB
37 AC 100% 42ms 23088KB
38 AC 100% 10ms 7968KB
39 AC 100% 129ms 56192KB
40 AC 100% 12ms 12672KB
41 AC 100% 87ms 48288KB
42 AC 100% 30ms 18288KB
43 AC 100% 138ms 57744KB
44 AC 100% 53ms 31456KB
45 AC 100% 85ms 41696KB
46 AC 100% 71ms 36432KB
47 AC 100% 101ms 46704KB
48 AC 100% 115ms 50256KB
49 AC 100% 52ms 28208KB
50 AC 100% 110ms 45312KB
51 AC 100% 20ms 13088KB
52 AC 100% 53ms 26896KB
53 AC 100% 35ms 21648KB
54 AC 100% 62ms 34848KB
55 AC 100% 20ms 15664KB
56 AC 100% 62ms 34192KB
57 AC 100% 34ms 28480KB
58 AC 100% 39ms 26944KB
59 AC 100% 35ms 24976KB
60 AC 100% 29ms 18288KB
61 AC 100% 46ms 25072KB
62 AC 100% 83ms 42080KB
63 WA 0% 90ms 43136KB
64 AC 100% 96ms 48768KB
65 AC 100% 97ms 42400KB
66 AC 100% 3ms 8048KB
67 WA 0% 71ms 38592KB
68 WA 0% 65ms 34480KB
69 AC 100% 158ms 68480KB
70 AC 100% 54ms 32480KB

ソースコード

#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]=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;
}