| ||||||||||
| 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:SPFA+二维数组记录In Reply To:SPFA+二维数组记录 Posted by:yanqing at 2011-07-13 17:31:12 > #include <cstdio>
> #include <cstdlib>
> #define oo 2147483647
> int n,kk,m;
> struct node{
> int x,len,w,next;
> }e[10010];
> int k[110];
> int tot;
> int d[110][10000];
> int f[1000000];
> bool v[110];
> void add(int a,int b,int c,int d){
> e[++tot].x=b;
> e[tot].len=c;
> e[tot].w=d;
> e[tot].next=k[a];
> k[a]=tot;
> }
> void spfa(){
> int head=0,tail=1;
> for (int i=2;i<=n;i++)
> for (int j=0;j<=kk;j++)
> d[i][j]=2147483;
> v[1]=true;
> f[tail]=1;
> while (head<tail){
> int x=f[++head];
> v[x]=false;
> for (int t=k[x];t;t=e[t].next){
> int to=e[t].x;
> for (int i=e[t].w;i<=kk;i++){
> if (d[to][i]>d[x][i-e[t].w]+e[t].len){
> d[to][i]=d[x][i-e[t].w]+e[t].len;
> if (!v[to]){
> v[to]=true;
> f[++tail]=to;
> }
> }
> }
> }
> }
> }
> int main(){
> scanf("%d%d%d",&kk,&n,&m);
> for (int i=1;i<=m;i++){
> int a,b,c,d;
> scanf("%d%d%d%d",&a,&b,&c,&d);
> add(a,b,c,d);
> }
> spfa();
> int max=oo;
> for (int i=0;i<=kk;i++)
> if (d[n][i]<max) max=d[n][i];
> if (max==oo) printf("-1\n");else printf("%d\n",max);
> //system("pause");
> return 0;
> }
>
能否讲下思路?
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator