方老师的分身 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. 【czy系列赛】czy的后宫6 && bzoj1044 [HAOI2008]木棍分割

    题目描述 众所周知的是丧尸czy有很多妹子(虽然很多但是质量不容乐观QAQ),今天czy把n个妹子排成一行来检阅.但是czy的妹子的质量实在--所以czy看不下去了.检阅了第i个妹子会增加czy a[ ...

  2. poj1552

    Doubles Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18824   Accepted: 10846 Descrip ...

  3. <转载>构造函数与拷贝构造函数

    原文地址http://www.cnblogs.com/waynelu/archive/2012/07/01/2572264.html 构造函数 构造函数.析构函数与赋值函数是每个类最基本的函数. 对于 ...

  4. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

  5. flexible.js字体大小诡异现象解析及解决方案

    最近在做一个手机端页面时,遇到了一个奇怪的问题:字体的显示大小,与在CSS中指定的大小不一致.大家可以查看这个Demo(记得打开Chrome DevTools). 就如上图所示,你可以发现,原本指定的 ...

  6. js获取某个标签中的信息

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. 百度地图API用法(传地址)

    网上找了很多都是没用的,非动态用法,最后在官网论坛才问到的 现在来一步一步教大家用 1 这是地址:   http://developer.baidu.com/map/ 选择web开发 先获取密钥   ...

  8. Android Canvas设置绘画时重叠部分的处理模式【含效果图】

    在Android的PorterDuff.Mode类中列举了他们制定的规则: android.graphics.PorterDuff.Mode.SRC:只绘制源图像 android.graphics.P ...

  9. 数据结构——左高树

    一.扩充二叉树 考察一棵二叉树,它有一类特殊的节点叫做外部节点( external node),用来代替树中的空子树,其余节点叫做内部节点( internal node).增加了外部节点的二叉树被称为 ...

  10. js基础-需要注意的地方

    ---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...