方老师的分身 II

Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

方老师计算出了走路时间最长的那个分身所用的时间。于是有个特殊的分身(据说是方老师真身!)就不想如此古板的走最短路了!由于这个分身的特殊性,这个分身对于单向边可以当双向边走。但是这个特殊的分身想走最短路的同时,要求至少经过k条边。

Input

有多组数据

第一行两个整数n,m(1≤n≤5000,1≤m≤100000)表示有n个教室,m条边。

接下来m行,每行3个数,u,v,t。表示u,v间有一条长度为t的边。

最后一行三个整数s,t,k,表示起点、终点、至少经过k(k≤50)条边。

Output

一个整数,表示最短路径长度。如果无解输出−1。

每组数据占一行。

Sample input and output

Sample Input Sample Output
4 4
1 2 1
2 3 2
1 3 100
3 4 1
1 3 5
7

Source

2014 UESTC Training for Graph Theory
 
解题报告:
还是跑SPFA,不过加了个经过的边数。。其他的跟SPFA一样的..
 
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define pb push_back
using namespace std;
const int maxn = 5e3 + ;
int mincost[maxn][+];
bool inqueue[maxn][+]; typedef struct Edge
{
int target,cost;
Edge(int target ,int cost)
{
this->target = target , this->cost = cost;
}
}; typedef struct status
{
int pos,step;
status(int pos,int step)
{
this->pos = pos , this->step = step;
}
}; queue<status>q;
vector<Edge>E[maxn];
int n,m,st,ed,k; void bfs()
{
mincost[st][] = ;
q.push(status(st,));
while(!q.empty())
{
int pos = q.front().pos , step = q.front().step ; q.pop();
int thiscost = mincost[pos][step];
inqueue[pos][step] = false;
for(int i = ; i < E[pos].size() ; ++ i)
{
int nextnode = E[pos][i].target;
int thisstep = min(,step+);
if (mincost[nextnode][thisstep] == - || mincost[nextnode][thisstep] > thiscost + E[pos][i].cost)
{
mincost[nextnode][thisstep] = thiscost + E[pos][i].cost;
if (!inqueue[nextnode][thisstep])
{
q.push(status(nextnode,thisstep));
inqueue[nextnode][thisstep] = true;
}
}
}
}
} int main(int argc,char *argv[])
{
while(~scanf("%d%d",&n,&m))
{
memset(mincost,-,sizeof(mincost));
memset(inqueue,false,sizeof(inqueue));
for(int i = ; i <= m ; ++ i)
{
int u,v,t;
scanf("%d%d%d",&u,&v,&t);
E[u].pb(Edge(v,t));
E[v].pb(Edge(u,t));
}
scanf("%d%d%d",&st,&ed,&k);
bfs();
int ans = mincost[ed][k];
for(int i = k + ; i <= ; ++ i)
if (mincost[ed][i] != -)
{
if (ans == -)
ans = mincost[ed][i];
ans = min (ans , mincost[ed][i]);
} printf("%d\n",ans);
for(int i = ; i <= n ; ++ i)
E[i].clear();
}
return ;
}

UESTC_方老师的分身 II CDOJ 915的更多相关文章

  1. UESTC 915 方老师的分身II --最短路变形

    即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...

  2. cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】

    http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memo ...

  3. UESTC_方老师分身 I CDOJ 914

    方老师分身 I Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  4. UESTC_方老师买表 CDOJ 885

    老师买表 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Stat ...

  5. UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>

    L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. UESTC 914 方老师的分身I Dijkstra

    题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...

  7. UESTC 916 方老师的分身III --拓扑排序

    做法: 如果有a<b的关系,则连一条a->b的有向边,连好所有边后,找入度为0的点作为起点,将其赋为最小的价值888,然后其所有能到的端点,价值加1,加入队列,删去上一个点,然后循环往复, ...

  8. UESTC 917 方老师的分身IV --求欧拉路径

    判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在). 将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有, ...

  9. cdoj916-方老师的分身 III 【拓扑排序】

    http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others)     Memo ...

随机推荐

  1. hihoCoder 1116 计算 (线段树)

    题意 : 描述 现在有一个有n个元素的数组a1, a2, ..., an. 记f(i, j) = ai * ai+1 * ... * aj. 初始时,a1 = a2 = ... = an = 0,每次 ...

  2. hdu 5430 Reflect (数学推导题)

    Problem Description We send a light from one point on a mirror material circle,it reflects N times a ...

  3. VS快捷编码方式

    概念: 代码段是将预先定义好的可重用代码块快速插入到代码文件中,代码段提高了开发效率,增强了代码的可重用性:既节约了时间,又实现了不同开发人员间代码的共享.同时也可保证同一项目中代码风格的统一.   ...

  4. POJ 2524 并查集

    Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23580 Accepted: 1160 ...

  5. [Hapi.js] View engines

    View engines, or template engines, allow you to maintain a clean separation between your presentatio ...

  6. LR选择哪种方式录制

    LR选择哪种方式录制,有以下考虑原则: 1.基于浏览器的应用程序推荐使用HTML-basic script方式录制 2.不是基于浏览器的应用程序推荐使用URL-basic script方式录制 3.如 ...

  7. docker 数据管理

    一,介于创建docker容器退出或者删除容器数据无法得以保存以及docker容器中的分区较小的问题存在,未解决该问题,可以使用参考以下几种方法. 1,将宿主的目录挂载到容器中去. docker run ...

  8. linux基础内容学习一:linux下的分区及安装

    linux看系统版本信息 uname -a 如果显示为i386,i686则为32位系统,如果为x86_64则为64位 一块硬盘最多可以有四个主分区其中一个主分区可以用一个扩展分区替换,在这个扩展分区中 ...

  9. java学习——abstract 和 final

    当多个类中出现相同功能,但是功能主题不同,这时可以进行向上抽取.这时只抽取功能定义,而不抽取功能主体. 抽象:看不懂.1, 抽象方法一定定义在抽象类中.2, 抽象方法和抽象类都必须被abstract关 ...

  10. windows xp通过VNC viewer远程连接RHEL5桌面

    环境: [root@localhost ~]# cat /etc/issue Red Hat Enterprise Linux Server release 5.2 (Tikanga) Kernel ...