记录编号 334373 评测结果 AAAAAAAAAA
题目名称 奶牛派对 最终得分 100
用户昵称 GravatarMarvolo 是否通过 通过
代码语言 C++ 运行时间 0.443 s
提交时间 2016-10-31 21:35:24 内存使用 5.49 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #define N 1010
  5. #define INF 0x3f3f3f3f
  6. using namespace std;
  7.  
  8. int n,m,i,zd,x,y,l,lsum=1,ans=0,t,w,j;
  9. int head[N],dis[N],v[N],z[N];
  10. struct line{
  11. int t,l,next;
  12. }e[N*100];
  13.  
  14. namespace IO{
  15. char buf[1<<22],*fs,*ft;
  16. inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
  17. inline int gint(){
  18. int x=0,ch=gc();
  19. while(ch<'0'||ch>'9') ch=gc();
  20. while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=gc();
  21. return x;
  22. }
  23. }
  24. using namespace IO;
  25.  
  26. inline void Add(int s,int t,int l){
  27. e[lsum].t=t; e[lsum].l=l;
  28. e[lsum].next=head[s]; head[s]=lsum++;
  29. }
  30. inline void Swap(int &x,int &y){int t=x; x=y; y=t;}
  31. inline int max(int a,int b){return (a>b)?a:b;}
  32.  
  33. inline int SPFA(int S,int T){
  34. int j=0,y=0;
  35. memset(z,0,sizeof(z)); memset(dis,INF,sizeof(dis));
  36. memset(v,0,sizeof(v)); dis[S]=0; t=0; w=0;
  37. z[++t]=S; v[S]=1;
  38. while (w!=t){
  39. w=(w+1)%n; x=z[w]; v[x]=0;
  40. for (j=head[x];j;j=e[j].next)
  41. if (dis[x]+e[j].l<dis[e[j].t]) {
  42. dis[e[j].t]=dis[x]+e[j].l;
  43. if (!v[e[j].t]) {
  44. t=(t+1)%n; y=(w+1)%n; z[t]=e[j].t; v[e[j].t]=1;
  45. if (dis[e[j].t]<dis[z[y]]) z[t]=z[y],z[y]=e[j].t;
  46. } //SLF
  47. }
  48. }
  49. return dis[T];
  50. }
  51.  
  52. int main(){
  53. freopen("party.in","r",stdin);
  54. freopen("party.out","w",stdout);
  55. n=gint(); m=gint(); zd=gint();
  56. for (i=1;i<=m;i++){
  57. x=gint(); y=gint(); l=gint();
  58. Add(x,y,l);
  59. }
  60. for (i=1;i<=n;i++){
  61. if (i==zd) continue;
  62. ans=max(ans,SPFA(i,zd)+SPFA(zd,i));
  63. }
  64. printf("%d\n",ans);
  65. return 0;
  66. }