2种方式直接代码就可以了。注意首次不需要60S的转换

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == ? b : gcd(b, a % b);}
#define MAXN 105
const int INF = 0x3f3f3f3f;
int T[],N,K;
int w[MAXN][MAXN],d[MAXN];
int src[MAXN];
typedef pair<int,int> pii;
priority_queue<pii,vector<pii>,greater<pii> > q;
void read()
{
memset(w,0x3f,sizeof(w));
for (int i = ; i < N; i++) scanf("%d",&T[i]);
for (int i = ; i < N; i++)
{
int cas = ;
char ch;
do
{
scanf("%d",&src[cas++]);
ch = getchar();
}while (ch != '\n');
for (int j = ; j < cas; j++)
for (int k = j; k < cas; k++)
{
w[src[j]][src[k]] = min(w[src[j]][src[k]],abs(src[k] - src[j]) * T[i]);
w[src[k]][src[j]] = min(w[src[k]][src[j]],abs(src[k] - src[j]) * T[i]);
}
}
}
void SPFA()
{
bool inq[MAXN];
memset(inq,false,sizeof(inq));
memset(d,0x3f,sizeof(d));
d[] = ;
queue<int>que;
while (!que.empty()) que.pop();
que.push();
while (!que.empty())
{
int u = que.front();que.pop();
inq[u] = false;
for (int i = ; i < MAXN; i++)
{
if (u == )
{
if (d[i] > d[u] + w[u][i])
{
d[i] = d[u] + w[u][i];
if (!inq[i])
{
inq[i] = true;
que.push(i);
}
}
}
else
{
if (d[i] > d[u] + w[u][i] + )
{
d[i] = d[u] + w[u][i] + ;
if (!inq[i])
{
inq[i] = true;
que.push(i);
}
}
}
}
}
}
void dijkstra()
{
memset(d,0x3f,sizeof(d));
d[] = ;
q.push(make_pair(d[],));
while (!q.empty())
{
pii t = q.top();q.pop();
int u = t.second;
if (t.first != d[u]) continue;
for (int v = ; v < MAXN; v++)
{
if (u == )
{
if (d[v] > d[u] + w[u][v])
{
d[v] = d[u] + w[u][v];
q.push(make_pair(d[v],v));
}
}
else
{
if (d[v] > d[u] + w[u][v] + )
{
d[v] = d[u] + w[u][v] + ;
q.push(make_pair(d[v],v));
}
}
}
}
}
int main()
{
//freopen("sample.txt","r",stdin);
while (scanf("%d%d",&N,&K) != EOF)
{
read();
SPFA();
//dijkstra();
if (d[K] == INF) puts("IMPOSSIBLE");
else printf("%d\n",d[K]);
}
return ;
}

最新文章

  1. duilib进阶教程 -- 改进List控件 (16)
  2. TokuDB介绍——本质是分形树(一个叶子4MB)+缓存减少写操作
  3. jQuery之锚点带动画跳转特效
  4. linux创建SVN客户端,服务器
  5. TempDB 中表变量和局部临时表的对比
  6. Java 笔试面试 算法编程篇 一
  7. javascript编程代码笔记
  8. 【Spring源码深度解析学习系列】容器的基础XmlBeanFactory(二)
  9. CodeForces Round #555 Div.3
  10. LeetCode 31 Next Permutation / 60 Permutation Sequence [Permutation]
  11. Jmeter正则表达式提取器(转载)
  12. Mysql添加注释(comment)(转)
  13. LeetCode--004--寻找两个有序数组的中位数(java)
  14. Android面试优雅地介绍自己的项目
  15. Vue:模板&amp;渲染函数学习
  16. win7语音识别开发(sapi)
  17. HDU 3007 模拟退火算法
  18. 5 使用ip代理池爬取糗事百科
  19. Linux OpenCV 静态链接错误
  20. 使用Foxfly.Net读取STEP文件

热门文章

  1. Leetcode 538. 把二叉搜索树转换为累加树
  2. cf978E Bus Video System
  3. 第三章:Web表单
  4. 设置默认以管理员运行的WinForm
  5. Hibernate---架构
  6. string函数Contains()实例
  7. 《Cracking the Coding Interview》——第12章:测试——题目3
  8. python学习_循环结构 and 类型判断
  9. (总结)Nginx使用的php-fpm的两种进程管理方式及优化
  10. 【bzoj2879】[Noi2012]美食节 费用流+动态加边