2014年1月27日 星期一

[UVA] 1424 - Salesmen


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int ma[105][105];
int s[205],dp[205];
int main(){
    int t,x,y,n,m,i,j,k;
    scanf("%d",&t);
    while(t--){
        memset(dp,0,sizeof(dp));
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++)
                ma[i][j]=999999999;
            ma[i][i]=0;
        }
        for(i=0;i<m;i++){
            scanf("%d%d",&x,&y);
            ma[x][y]=ma[y][x]=1;
        }
        for(k=1;k<=n;k++)
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    ma[i][j]=min(ma[i][j],ma[i][k]+ma[k][j]);
        scanf("%d",&m);
        for(i=1;i<=m;i++)
            scanf("%d",&s[i]);
        for(i=2;i<=m;i++){
            dp[i]=i-1;
            for(j=1;j<i;j++){
                if(ma[s[j]][s[i]]<=i-j){
                    dp[i]=min(dp[i],dp[j]+i-j-1);
                }
            }
        }
        printf("%d\n",dp[m]);
    }
}

沒有留言:

張貼留言