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 |
内存用到1512K的时候就超时了,难道这么输入不行? (code见内 )In Reply To:邻接链表 Posted by:Sempr at 2007-01-13 21:03:24 #include <stdio.h> #include <malloc.h> int dist[30003], m, n; int heap[30003], bold; struct arc{ int end; int w; struct arc * nextarc; } adjList[30003]; inline void swap( int *x, int *y ) { int k; k=*x; *x=*y; *y=k; } void Modify( ) { int i, t, k=bold>>1; if( bold%2 ) if( dist[ heap[k] ] > dist[ heap[bold] ] ) swap( &heap[k], &heap[bold] ); if( dist[ heap[k] ] > dist[ heap[k<<1] ] ) swap( &heap[k], &heap[k<<1] ); for( i=k-1; i>=1; i-- ) { t=i<<1; if( dist[ heap[t] ] < dist[ heap[i] ] ) swap( &heap[t], &heap[i] ); if( dist[ heap[t+1] ] < dist[ heap[ i ] ] ) swap( &heap[t+1], &heap[i] ); } } int PopNode( ) { int x; Modify( ); x=heap[1]; heap[1]=heap[bold]; bold--; return x; } int solve( ) { int u, i, nt; struct arc * pt; bold=n; for( i=1; i<=n; i++ ) { heap[ i ]=i; dist[ i ]=0x7fffffff; adjList[i].w = 1; } dist[1] = 0; for( i=1; i<=n; i++ ) { u = PopNode( ); adjList[u].w = 0; pt=adjList[ u ].nextarc; while( pt ) { nt= pt->end; if( adjList[ nt ].w !=0 && dist[u]+ ( pt->w) < dist[ nt ] ) dist[ nt ] = dist[ u ] + ( pt->w ); pt = pt->nextarc; } } return dist[n]; } int main( ) { int i, a, b, c; struct arc *pp; struct arc *pt; scanf("%d%d", &n, &m); for( i=0; i<m; i++ ) { scanf( "%d%d%d", &a, &b, &c ); pt=(struct arc *)malloc( sizeof(struct arc) ); pp=&(adjList[a]); while( pp->nextarc ) pp=pp->nextarc; pp->nextarc=pt; pt->end = b; pt->w = c; pt->nextarc = NULL; } printf( "%d\n", 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