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 |
Re:为什么老是wa,罪过啊。附上代码请强人帮忙看看,谢谢!In Reply To:为什么老是wa,罪过啊。附上代码请强人帮忙看看,谢谢! Posted by:badboy at 2007-01-20 15:36:29 Uva开始比赛了,把我的代码先给你看看吧..... // Solution by richard // shortest path problem,courtesy of Dijkstra #include <stdio.h> #include <string.h> struct node { int vto,v; int next; }; struct edge { int s,t; int v; }; struct node matrix[1<<18]; struct edge heap[1<<18]; int d[65536/2],visit[65536/2]; int tail=0; int bi; int n,m; void fix_up() { int i,k; struct edge p; i=tail; p=heap[i]; while (i>1) { k=i/2; if (heap[k].v>p.v) heap[i]=heap[k]; else break; i=k; } heap[i]=p; } void fix_down() { int i,k; struct edge p; i=1; p=heap[1]; while (i<=tail/2) { k=i*2; if (k<tail && heap[k+1].v<heap[k].v) ++k; heap[i]=heap[k]; i=k; } heap[i]=p; } void insert(int s,int t,int v) { heap[++tail].s=s; heap[tail].t=t; heap[tail].v=v; fix_up(); } struct edge get() { struct edge p=heap[1]; heap[1]=heap[tail--]; fix_down(); return p; } void construct(int s,int t,int v) { matrix[bi].next=matrix[s].next; matrix[s].next=bi; matrix[bi].vto=t; matrix[bi++].v=v; } void get_edges(int s) { int i; i=matrix[s].next; while (i) { insert(s,matrix[i].vto,matrix[i].v); i=matrix[i].next; } } void read_data() { int i; int a,b,c; for (i=0;i<m;++i) { scanf("%d %d %d",&a,&b,&c); construct(a,b,c); } } void solve() { struct edge e; visit[1]=1; get_edges(1); while (tail) { e=get(); if (!visit[e.t]) { visit[e.t]=1; get_edges(e.t); d[e.t]=d[e.s]+e.v; } } printf("%d\n",d[n]); } int main() { scanf("%d %d",&n,&m); bi=n+1; read_data(); solve(); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator