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 richardxx at 2007-01-20 17:56:45 on Problem 3159
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:
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