codeforce Gym 100570B ShortestPath Query (最短路SPFA)
题意:询问单源最短路径,每条边有一个颜色,要求路径上相邻边的颜色不能相同,无重边且边权为正。
题解:因为路径的合法性和边的颜色有关,
所以在做spfa的时候,把边丢到队列中去,松弛的时候注意判断一下颜色,d数组表示到这条边的出点v的距离。
期望复杂度是O(km),k是边入队次数,m是边数。最后根据边来松弛顶点,O(m),总复杂度是O(km+m)。
一开始想的Dijkstra(看到边权为正。。),存点和之前边的颜色每次更新的时候判断来的那个点的颜色和当前边的颜色是否一样,WA了,很快我就意识到,入点不能只保存最短路径的颜色c1,如果边的颜色和c1一样,那么会判成路径不合法,但是实际上可能还存在一条次短路径且颜色和c1不等。因此每个点只需保存两个信息。
#include<cstdio>
#include <queue>
#include<cstring> using namespace std;
typedef long long ll;
#define mins(s,v) if(s>v) s = v const int maxn = 1e5+;
const ll INF = 0x7f7f7f7f7f7f7f7fLL;
int head[maxn],nxt[maxn],to[maxn],col[maxn],wei[maxn];
int ecnt; ll d[maxn];//edge
ll d2[maxn];//vex
int n,m,C,q;
int s,t; bool vis[maxn]; void spfa()
{
memset(d,0x7f,sizeof(ll)*m);
memset(vis,,sizeof(vis));
queue<int> q;
for(int i = head[s]; ~i ; i = nxt[i] ){
q.push(i); vis[i] = true; d[i] = wei[i];
} while(q.size()){
int e = q.front(); q.pop(); vis[e] = false;
for(int i = head[to[e]]; ~i; i = nxt[i]) {
if(col[e] != col[i] && wei[i]+d[e] < d[i] ){
d[i] = wei[i] + d[e];
if(!vis[i]) { q.push(i); vis[i] = true; }
} }
}
memset(d2+,0x7f,sizeof(ll)*n);
d2[s] = ;
for(int i = ; i < m; i++)
mins(d2[to[i]],d[i]);
} inline void AddEdge(int u,int v,int w,int c)
{
to[ecnt] = v;
wei[ecnt] = w;
col[ecnt] = c;
nxt[ecnt] = head[u];
head[u] = ecnt++;
} int main()
{
scanf("%d%d%d",&n,&m,&C);
memset(head+,-,sizeof(int)*n); for(int i = ; i < m; i++){
int u,v,c,w;
scanf("%d%d%d%d",&u,&v,&w,&c);
AddEdge(u,v,w,c);
}
scanf("%d%d",&s,&q); spfa();
for(int i = ; i < q; i++){
scanf("%d",&t);
printf("%I64d\n",d2[t]!=INF?d2[t]:-);
}
return ;
}
codeforce Gym 100570B ShortestPath Query (最短路SPFA)的更多相关文章
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- L - Subway(最短路spfa)
L - Subway(最短路spfa) You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. In ...
- Gym - 100570B :ShortestPath Query(SPFA及其优化)
题意:给定N点M边的有向图,每条边有距离和颜色,一条有效路径上不能有相邻的边颜色相同.现在给定起点S,多次讯问S到点X的最短有效距离. TLE思路:用二维状态dis(u,c)表示起点到u,最后一条边的 ...
- LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)
Extended Traffic 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/O Description Dhaka city ...
- 30-算法训练 最短路 spfa
http://lx.lanqiao.cn/problem.page?gpid=T15 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个n个顶点, ...
- ACM/ICPC 之 最短路-SPFA+正逆邻接表(POJ1511(ZOJ2008))
求单源最短路到其余各点,然后返回源点的总最短路长,以构造邻接表的方法不同分为两种解法. POJ1511(ZOJ2008)-Invitation Cards 改变构造邻接表的方法后,分为两种解法 解法一 ...
- POJ 1847 Tram --set实现最短路SPFA
题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...
- 【POJ】3255 Roadblocks(次短路+spfa)
http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...
- 【wikioi】1269 匈牙利游戏(次短路+spfa)
http://www.wikioi.com/problem/1269/ 噗,想不到.. 次短路就是在松弛的时候做下手脚. 设d1为最短路,d2为次短路 有 d1[v]>d1[u]+w(u, v) ...
随机推荐
- redis需要掌握的知识点
- Matcher的group()/group(int group)/groupCount()用法介绍
直接上代码: package com.dajiangtai.djt_spider.util; import java.util.regex.Matcher;import java.util.regex ...
- ACM-ICPC2018沈阳网络赛 Lattice's basics in digital electronics(模拟)
Lattice's basics in digital electronics 44.08% 1000ms 131072K LATTICE is learning Digital Electron ...
- Jsoncpp写“鱘”的json数据,报错。
最近在用Json::FastWriter生成json数据时,发现一个问题.含有“鱘”字的json字段会多出一个斜杠,不知道是不是编码的问题. C++要使用JSON来解析数据,一般采用jsoncpp. ...
- 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录
在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...
- AcDbDictionary of AcDbDatabase
GroupDictionary MLStyleDictionary LayoutDictionary PlotStyleNameDictionary MaterialDictionary Visual ...
- 10.使用子查询 ---SQL
利用子查询进行过滤 普通查询: SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01'; 输出▼ order_num ----------- ...
- redis之使用
redis之使用 redis ================================= 1.自动分配.你在什么时候用到了自动分配? 答:市场部或运营部招来的新的客户,单条(批量)录入数据的 ...
- linux 03 命令 续
linux 03 命令 续 一.vim 两种操作方式:新文件 pyvip@Vip:~/demo/2_3$ vim demo.txt #操作一个新文件 一开始进入的是命令模式,按i进入插入模式,开始编辑 ...
- CodeForces - 361A-Levko and Table (思维)
Levko loves tables that consist of n rows and n columns very much. He especially loves beautiful tab ...