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

我真的找不出这俩个程序之间到底有什么 差别了 为什么一个超时一个却79ms 麻烦哪位牛牛帮忙分析一下 谢谢

Posted by youfeng243MJ at 2010-08-09 12:17:23 on Problem 1724
rt
这个是超时的:
#include<iostream>
#include<queue>
#include<cstdlib>
#include<cstdio>
#define INF 1000000
using namespace std;
typedef struct Stat
{
    int len;
    int x;
    int cost;
    friend bool operator<(Stat a,Stat b)
    {
        return a.len>b.len;
    }
}Stat;
int cost[105][105]={0};
int map[105][105]={0};
int Graph[105][105]={0};
int n,m,k;
Stat start,t,T;
int dist[105];
priority_queue<Stat>Queue;
int main()
{
    int x,y,dis,pay,i,j;
    start.x=1;
    start.len=0;
    start.cost=0;
    scanf("%d %d %d",&n,&m,&k);
    dist[m]=INF;
    while(k--)
    {
        scanf("%d %d %d %d",&x,&y,&dis,&pay);
        map[x][++map[x][0]]=y;
        Graph[x][y]=dis;
        cost[x][y]=pay;
    }
    Queue.push(start);
    while(!Queue.empty())
    {
        t=Queue.top();
        Queue.pop();
        dist[t.x]=t.len;
        if(t.x==m)
        break;
        for(i=1;i<=map[t.x][0];i++)
        {
            if(cost[t.x][map[t.x][i]]+t.cost<=n)
            {
                T.len=t.len+Graph[t.x][map[t.x][i]];
                T.x=map[t.x][i];
                T.cost=cost[t.x][map[t.x][i]]+t.cost;
                Queue.push(T);
            }
        }
    }
    if(dist[m]>=INF)
    printf("-1\n");
    else
    printf("%d\n",dist[m]);
    return 0;
}

这个是AC 79ms的

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
#define inf 10000000
int N,K,R,dis[105];
struct Road
{
    int d,l,t;
}r;
struct P
{
    int v,dist,val;
    friend bool operator<(P a,P b){
       return a.dist > b.dist;
    }
};
vector<Road> v[105];
priority_queue<P> q;
int main()
{
    int i,j,s,d,l,t;
    while(scanf("%d%d%d",&K,&N,&R)==3)
    {
       for(i=1;i<=N;i++)
       {
           v[i].clear();
           dis[i]=inf;
       }
       for(i=0;i<R;i++)
       {
           scanf("%d%d%d%d",&s,&d,&l,&t);
           r.d=d;r.l=l;r.t=t;
           v[s].push_back(r);
       }
       P pp,qq;
       while(!q.empty()) q.pop();
       pp.v=1; pp.dist=0;pp.val=0;
       q.push(pp);
       while(!q.empty())
       {
           pp=q.top(); q.pop();
           s=pp.v;
           dis[s]=pp.dist;
           if(s==N)
              break;
           for(i=0;i<v[s].size();i++)
           {
              r=v[s][i];
              if(pp.val+r.t<=K)
              {
                  qq.v=r.d;
                  qq.dist=pp.dist+r.l;
                  qq.val=pp.val+r.t;
                  q.push(qq);
              }
           }
       }
       if(dis[N]!=inf)
           printf("%d\n",dis[N]);
       else
           printf("-1\n");
    }
    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