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

仔细看了下枚举的方法 然后自己做1A- -

Posted by Ink213 at 2013-05-16 20:04:03 on Problem 1062
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=105, infi=1<<30;
int map[MAXN][MAXN], d[MAXN], rank[MAXN], p[MAXN], x, n;
bool used[MAXN];
void dijkstra(int st,int ed)
{
    int i, j;
    memset(used,0,sizeof(used));
    for(i=1;i<=n;i++)
    {
        if(rank[i]<st||rank[i]>ed)  used[i]=true;
        d[i]=infi;
    }
    d[1]=0;
    for(i=1;i<n;i++)
    {
        int minv=infi, k;
        for(j=1;j<=n;j++)
        {
            if(!used[j]&&d[j]<minv)
            {
                minv=d[j];
                k=j;
            }
        }
        if(minv==infi) break;
        used[k]=true;
        for(j=1;j<=n;j++)
        {
            if(!used[j]&&d[k]+map[k][j]<d[j])
            {
                d[j]=d[k]+map[k][j];
            }
        }
    }
}
int main()
{
    int m, i, j, a, b;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                map[i][j]=infi;
        for(i=1;i<=n;i++)
        {
            scanf("%d%d%d",&p[i],&rank[i],&x);
            {
                while(x--)
                {
                    scanf("%d%d",&a,&b);
                    map[i][a]=b;
                }
            }
        }
        int solv=infi;
        for(i=rank[1]-m;i<=rank[1];i++)
        {
            dijkstra(i,i+m);
            for(j=1;j<=n;j++)
                solv=min(solv,p[j]+d[j]);
        }
        printf("%d\n",solv);
    }
    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