Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
神牛帮忙看一下为什么wa#include<cstdio> const int maxn=30001, maxm=150002; int n,m,E,d[maxn],first[maxn],next[maxm],point[maxm],value[maxm]; int len,heap[maxn],pla[maxn]; inline void Add_edge(int u,int v,int w){ point[++E]=v;value[E]=w;next[E]=first[u];first[u]=E; } void swap(int a,int b){ int t=heap[a];heap[a]=heap[b];heap[b]=t; pla[heap[a]]=a;pla[heap[b]]=b; } void up(int x){ while(x>1&&d[heap[x]]<d[heap[x/2]])swap(x,x>>=1); } void down(int x){ for(int min;x*2<=len;x=min){ min=(x*2<len?(d[heap[x*2]]<d[heap[x*2+1]]?x*2:x*2+1):x*2); if(d[heap[min]]>=d[heap[x]])break; swap(x,min); } } int main(){ //freopen("3159.in","rb",stdin); scanf("%d%d",&n,&m); for(int i=0,x,y,z;i<m;i++){ scanf("%d%d%d",&x,&y,&z); Add_edge(x,y,z); } for(int i=2;i<=n;i++)d[i]=1061109567; for(int i=1;i<=n;i++)pla[heap[i]=i]=i; for(len=n;len;){ int p=heap[1]; swap(1,len--); down(1); for(int i=first[p];i;i=next[i]) if(d[point[i]]>d[p]+value[i]){ d[point[i]]=d[p]+value[i]; up(pla[point[i]]); } } printf("%d\n",d[n]); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator