zoukankan      html  css  js  c++  java
  • UVa 10801 Lift Hopping / floyd

    乘电梯 求到目标层的最短时间 有n个电梯 换一个电梯乘需要额外60秒

    所以建图时每个电梯自己能到的层数先把时间算好 这是不需要60秒的

    然后做floyd时 如果松弛 肯定是要换电梯 所以要加60秒

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <algorithm>
    #include <cmath>
    #include <cstdlib>
    using namespace std;
    int a[110][110];
    int b[110];
    int n,m;
    
    void floyd()
    {
    	int i,j,k;
    	for(k = 0;k <= 100; k++)
    			for(i = 0;i <= 100; i++)
    				for(j = 0;j <= 100; j++)
    						a[i][j] = min(a[i][j],a[i][k]+a[k][j]+60);
    
    }
    int main()
    {
    	int t,n,i,j,k;
    	while(scanf("%d %d",&n,&m)!=EOF)
    	{
    		//for(k = 1;k <= n; k++)
    		for(i = 0;i <= 100; i++)
    			for(j = 0;j <= 100; j++)
    			{
    				if(i == j)
    					a[i][j] = 0;
    				else
    					a[i][j] = 999999999;
    			}
    		for(i = 0; i < n; i++)
    			scanf("%d",&b[i]);
    		getchar();
    		for(i = 0; i < n; i++)
    		{
    			char str[1000];
    			char *p;
    			gets(str);
    			//puts(str);
    			p = strtok(str," ");
    			int cnt[110];
    			int j = 0;
    			while(p)
    			{
    				cnt[j++] = atoi(p);
    				p = strtok(NULL," ");
    			}
    			for(k = 1 ;k < j; k++)
    			{
    				for(t = 0; t < k; t++)
    				{
    					a[cnt[t]][cnt[k]] = min(a[cnt[t]][cnt[k]],b[i]*abs(cnt[k]-cnt[t]));
    					a[cnt[k]][cnt[t]] = min(a[cnt[k]][cnt[t]],b[i]*abs(cnt[k]-cnt[t]));
    				}
    			}
    		}
    		floyd();
    		if(a[0][m] == 999999999)
    			puts("IMPOSSIBLE");
    		else
    			printf("%d
    ",a[0][m]);
    	}
    	return 0;
    }


     

  • 相关阅读:
    Java基础学习(五) String类
    Java基础学习(四) java8线程
    Java基础学习(三) IO
    Java基础学习(二) 集合
    Java基础学习(一) 基本数据类型和引用数据类型
    枚举类常见漏洞解决
    数据校验
    postman如何传递token进行接口测试
    Spring Cloud-OpenFegin
    SpringCloud-Eureka
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3481931.html
Copyright © 2011-2022 走看看