lightoj 1099【dijkstra/BFS】
题意:
求 1-N 的第二长路,一条路可以重复走
if two or more shortest paths exist, the second-shortest path is the one whose length is longer than those but no longer than any other path
思路:
一开始想的就是:
我只要在spfa中更新的时候记录 dis[1][i]的最小和次小就好啦;
其实每个权值都带一个附属权值就好了;
这样能解决的好少,光是重复就不行了;
正确思路:
思想类似dijkstra 算法里:每次取最小边然后更新一波,只不过这里最小边有两种罢了;
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <set>
#include <vector>
#include <deque>
#include <map>
#define cler(arr, val) memset(arr, val, sizeof(arr))
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long LL;
const int MAXN = 5010+1;
const int MAXM = 240000;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
int d[MAXN][2],head[MAXN],tol;
bool vis[MAXN][2];
struct node
{
int u,v,val,next;
}edge[MAXM];
void addedge(int u,int v,int w)
{
edge[tol].u=u,edge[tol].v=v,edge[tol].val=w,edge[tol].next=head[u];
head[u]=tol++;
edge[tol].u=v,edge[tol].v=u,edge[tol].val=w,edge[tol].next=head[v];
head[v]=tol++;
}
void dij(int n)
{
for(int i=0;i<=n;i++)
d[i][0]=d[i][1]=INF,vis[i][0]=vis[i][1]=false;
d[0][0]=0;
while(true)
{
int v=-1,k;
int minlen=INF;
for(int u=0;u<n;u++)
{
for(int l=0;l<2;l++)
if(!vis[u][l]&&(v==-1||d[u][l]<minlen))
{
minlen=d[u][l];
k=l;
v=u;
}
}
if(v==-1) break;
vis[v][k]=true;
for(int i=head[v];~i;i=edge[i].next)
{
int u=edge[i].v;//目标
int cost=d[v][k]+edge[i].val;
if(cost<d[u][0])
{
d[u][1]=d[u][0];
d[u][0]=cost;
}
else if(cost<d[u][1]&&cost>d[u][0])
{
d[u][1]=cost;
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
int t,n,m,u,v,w,cas=1;
cin>>t;
while(t--)
{
cler(head,-1);
tol=0;
cin>>n>>m;
int a=0;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
a=max(a,u);
a=max(a,v);
u--,v--;
addedge(u,v,w);
}
dij(a);
printf("Case %d: %d\n",cas++,d[n-1][1]);
}
return 0;
}
lightoj 1099【dijkstra/BFS】的更多相关文章
- HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)
Coconuts Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- Help Hanzo (LightOJ - 1197) 【简单数论】【筛区间质数】
Help Hanzo (LightOJ - 1197) [简单数论][筛区间质数] 标签: 入门讲座题解 数论 题目描述 Amakusa, the evil spiritual leader has ...
- hdu 1026 Ignatius and the Princess I【优先队列+BFS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 【openjudge】【搜索(bfs)】P4980拯救行动
[描述:] 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁(#).和守卫(x). 英勇的骑士(r)决定孤身一人 ...
- CodeVS 1226 倒水问题【DFS/BFS】
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- lightoj 1025【区间DP】
题意: 给出一个word,求有多少种方法你从这个word清除一些字符而达到一个回文串. 思路: 区间问题,还是区间DP: 我判断小的区间有多少,然后往外扩大一点. dp[i,j]就代表从i到j的方案数 ...
- CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】
给定数字n,m(1<=n,m<=500000) 将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内. 求将n变为m的最少花费 思路:建图 将每个数 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- HDU 2102 A计划【三维BFS】
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
随机推荐
- HDFS 原理、架构与特性介绍
本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前HDFS架构详尽分析 HDFS架构 •NameNode •DataNode •Senc ...
- Android获取手机方向
假设用户开启了设置里的屏幕旋转,Android中处理横竖屏切换,通常的做法是在AndroidManifest.xml中定义android:configChanges="orientation ...
- CGGeometry.h详解
本文转载至:http://blog.csdn.net/chengyingzhilian/article/details/7894195 这些是在CGGeometry.h里的 CGPoint.CGSi ...
- sanic官方文档解析之Example(二)
1,通过docker部署sanic项目 通过Docker和Docker Compose部署SANIC应用程序是一项很容易实现的任务,下面的示例提供了示例simple_server.py的部署 FROM ...
- sharding-jdbc源码学习(一)简介
背景 对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问.采用Master-Slave复制模式的MySQL架构,只能够对数据库的读进行扩展,而对数据 ...
- python基础教程_学习笔记18:标准库:一些最爱——shelve
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...
- javascript学习的思维导图
今天逛师父的博客园,发现了好东西~~~~我给偷过来了~~~那就是javascript学习的思维导图,比自己整理更快速. 思维导图小tips: 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ...
- ffplay 一些好玩的filter
添加字幕:ffplay -vf drawtext="fontfile=arial.ttf: text='Test Text': x=100: y=300: \ fontsize=48: fo ...
- 用 Flotr2 实现的 HTML5 图表
1. [图片] 未命名.jpg 2. [代码][HTML]代码 <!DOCTYPE html><html lang="en" > <head& ...
- BZOJ_3781_小B的询问_莫队
BZOJ_3781_小B的询问_莫队 Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值 ...