Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:为什么老是wa,罪过啊。附上代码请强人帮忙看看,谢谢!

Posted by badboy at 2007-01-20 23:12:32 on Problem 3159
In Reply To:Re:为什么老是wa,罪过啊。附上代码请强人帮忙看看,谢谢! Posted by:richardxx at 2007-01-20 17:56:45
对于如下输入
4 4
1 2 1
2 3 2
3 4 3
1 4 4

你的程序输出为6,但正确的输出应该是4吧?


> 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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator