| ||||||||||
| 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:我的dij+heap怎么老TLE呢,哪位大牛指点一下In Reply To:我的dij+heap怎么老TLE呢,哪位大牛指点一下 Posted by:Airforce2007 at 2009-07-30 14:59:13 > #include<stdio.h>
> #define inf 1000000000
>
> struct arcnode
> {
> int adjvex,
> len,
> nextarc;
> }list[150000+30000+1+2];
> int pos[30000+1];
> int heap[30000+1];
> int dist[30000+1];
> int n,m,qlen;
>
> void qup(int u)
> {
> int i=heap[u];
> int p=u>>1;
> int tmp=dist[i];
> while(p>0&&dist[heap[p]]>tmp)
> {
> pos[heap[p]]=u;
> heap[u]=heap[p];
> u>>=1;p>>=1;
> }
> pos[i]=u;
> heap[u]=i;
> }
>
> void qdown(int root)
> {
> int p,t=heap[root], rc;
> while(p=(root<<1) <= qlen)
> {
> rc =(root<<1+1);
> if(rc <= qlen && dist[heap[rc]] < dist[heap[p]]) p = rc;
> if(dist[t] > dist[heap[p]] )
> {
> heap[root] = heap[p];
> pos[heap[root]] = root;
> }
> else break;
> root = p;
> }
> heap[root] = t;
> pos[heap[root]] = root;
> }
>
> void dij()
> {
> for(int i=1;i<=n;i++)
> {
> dist[i]=inf;
> heap[i]=i;
> pos[i]=i;
> }
> dist[1]=0;
> qlen=n;
> while(qlen)
> {
> int min=heap[1];
> heap[1]=heap[qlen--];
> pos[heap[1]]=1;
> qdown(1);
> int h=list[min].nextarc;
> while(h)
> {
> int w=dist[min] +list[h].len;
> int v=list[h].adjvex;
> if(dist[v]>w)
> {
> dist[v]=w;
> qup(pos[list[h].adjvex]);
> }
> h=list[h].nextarc;
> }
> }
> printf("%d\n",dist[n]);
> }
>
> int main()
> {
> freopen("in.txt","r",stdin);
> int a,b,c,l,h,head;
> while(scanf("%d %d",&n,&m)!=EOF)
> {
> for(int i=0,l=n+1;i<m;i++)
> {
> scanf("%d %d %d",&a,&b,&c);
> h=l++;
> list[h].adjvex=b;list[h].len=c;list[h].nextarc=0;
> head=list[a].nextarc;
> if(!head)
> list[a].nextarc=h;
> else
> {
> while(list[head].nextarc)
> head=list[head].nextarc;
> list[head].nextarc=h;
> }
> }
> dij();
> }
> while(1);
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator