热浪
7 11 5 4
2 4 2
1 4
3
7 2 2
3 4 3
5 7
5
7 3 3
6 1 1
6 3
4
2 4 3
5 6 3
7 2
1
样例输出 SampleOutput [复制数据]
7
#include<stdio.h> #include<stdbool.h> #include<limits.h> int a[40000],b[40000],c[40000],q[20000],d[20000],f[20000]; bool vis[20000]={false}; int x,y,z,sum,n,m,i,s,t; void qsort(int head, int tail) { int i,j,x,y,z; i=head;j=tail; x=a[head];y=b[head];z=c[head]; while(i<j) { while((i<j)&&(a[j]>=x)) j--; a[i]=a[j];b[i]=b[j];c[i]=c[j]; while((i<j)&&(a[i]<=x)) i++; a[j]=a[i];b[j]=b[i];c[j]=c[i]; } a[i]=x;b[i]=y;c[i]=z; if (head<(i-1)) qsort(head,i-1); if ((i+1)<tail) qsort(i+1,tail); } void spfa(int s) { int i,k,head,tail; for (i=1;i<=n;i++) d[i]=INT_MAX >> 1; d[s]=0; head=0;tail=1; q[1]=s; vis[s]=true; while (head<tail) { head=head%10000+1; k=q[head]; for (i=f[k];i<=(f[k+1]-1);i++) if ((d[k]+c[i])<d[b[i]]) { d[b[i]]=d[k]+c[i]; if (vis[b[i]]==false) { tail=tail%10000+1; q[tail]=b[i]; vis[b[i]]=true; } } vis[k]=false; } } int main(void) { scanf("%d%d%d%d\n",&n,&m,&s,&t); sum=0; for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); sum++; a[sum]=x; b[sum]=y; c[sum]=z; sum++; b[sum]=x; a[sum]=y; c[sum]=z; } m=m*2; qsort(1,m); for(i=1;i<=m;i++) if (f[a[i]]==0) f[a[i]]=i; f[n+1]=m+1; for (i=n;i>=1;i--) if (f[i]==0) f[i]=f[i+1]; spfa(s); printf("%d\n",d[t]); return 0; }
获取指定目录下指定扩展名文件的绝对路径,存储到文本文件中,布布扣,bubuko.com
原文:http://www.cnblogs.com/lxricecream/p/3591956.html