Lift Hopping, UVa 10801【Floyd】

来源:互联网 发布:网络磕是什么意思 编辑:程序博客网 时间:2024/06/10 12:13
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<cstring>#include<vector>using namespace std;int n,k;int v[10];vector<int> can[10];int dis[110][110];#define INF 1e9int main(void){int tmp;while(scanf("%d%d",&n,&k)==2){for(int i=0;i<=101;i++)for(int j=0;j<=101;j++)i==j?dis[i][j]=0:dis[i][j] = INF;for(int i=1;i<=n;i++)scanf("%d",&v[i]);for(int i=1;i<=n;i++)can[i].clear();for(int i=1;i<=n;i++){int tmp;char s;while(scanf("%d%c",&tmp,&s)){can[i].push_back(tmp);if(s=='\n')break;}}for(int i=1;i<=n;i++){for(int s=0;s<can[i].size();s++){for(int t=0;t<can[i].size();t++)dis[can[i][s]][can[i][t]]=min(dis[can[i][s]][can[i][t]],abs(can[i][t]-can[i][s])*v[i]);}}for(int p=0;p<=100;p++){for(int i=0;i<=100;i++){for(int j=0;j<=100;j++){dis[i][j] = min(dis[i][j],dis[i][p]+dis[p][j]+60);}}}if(dis[0][k]==INF)puts("IMPOSSIBLE");else printf("%d\n",dis[0][k]);}return 0;}
细节:可能会出现当前在第i层却返回到j(j<i)层的情况....floyd的边界不能是k,要是100
1 0